2016-12-23 2 views
3

Помощь завершить макияж всех файлов и папок, а затем скопировать их в папку, что вам нужно сделать, чтобы ограничить папку 100МбКопирование файлов с ограничением 100MB

Как сделать постоянную проверку папки на томе 100 МБ, если предел файлов в папке превышен, чтобы завершить копирование.

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 Right, но я не думаю, что было бы сложно написать классический цикл. –

+0

@ArteS Проводка ответа была ошибкой от меня ... Я оставлю ее для преобразования в нелинк код .. –

Смежные вопросы