2016-12-23 36 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代碼.. –