2016-12-23 39 views
3

帮助文件复制到完成所有文件和文件夹的弥补,并把它们复制到文件夹,你需要做的,以限制该文件夹为100MB与100MB的限制

如何制作的一个常数检查卷上的文件夹为100MB,如果文件夹中的文件超出限制,则完成复制。

public static void GetFilesList() 
{ 
    long DS = 1000000; 
    string[] extens = 
    { 
    ".txt", ".doc", 
    ".cs", ".ico", 
    ".Dll", ".Html", 
    ".Htm", ".Xml", 
    ".Php", ".png", 
    ".jpg", ".gif" 
    }; 
    if (DirSize(new DirectoryInfo(Easy.GooVer), DS) > DS) 
    { 
     foreach (string fileName in Directory.GetFiles(Easy.GooVer, "*.*", SearchOption.AllDirectories)) 
     { 
      string ext = Path.GetExtension(fileName); 
      if (Array.IndexOf(extens, ext) >= 0) 
      { try{ 
       File.Copy(fileName, Path.Combine(Easy.str1, Path.GetFileName(fileName)), true);}catch { } 
      } 
     } 
    } 
} 
public static long DirSize(DirectoryInfo d, long aLimit = 0) 
{ 
    long Size = 0; 
    FileInfo[] fis = d.GetFiles(); 
    foreach (FileInfo fi in fis) 
    { 
     Size += fi.Length; 
     if (aLimit > 0 && Size > aLimit) 
      return Size; 
    } 
    DirectoryInfo[] dis = d.GetDirectories(); 
    foreach (DirectoryInfo di in dis) 
    { 
     Size += DirSize(di, aLimit); 
     if (aLimit > 0 && Size > aLimit) 
      return Size; 
    } 
    return (Size); 
} 

P.S:我使用的是.Net 2.0,我不想使用Linq。

+1

你一定会移到您的来电DirSize到循环的内部?虽然不知道你正在问什么。几乎感觉像一个作业问题 – Darren

+0

DirSize我分配GetFilesList,尝试添加'while(true)',但没有帮助。 – GooliveR

回答

1

您的递归代码不正确。

您可以使用一个简单的代码来获取目录大小

public static long DirSize(DirectoryInfo d) 
{ 
    return d.GetFiles("*.*", SearchOption.AllDirectories).Sum(f => f.Length); 
} 
+0

尽管如此,不以任何方式解决他的问题。他需要在每个副本之前检查。 – Darren

+0

@Quantic对,但我不认为这会很难写出一个古典循环.. –

+0

@ArteS发布答案是我的一个错误......我会让它转换为非linq代码.. –