2011-09-21 1 views
0

Я пытаюсь написать приложение для вычисления размера набора акций с использованием следующего кода. Однако проблема заключается в том, что по мере того, как поиск проникает в акции, переменная пути к файлу в цикле становится большим, и исключение получает бросок и, следовательно, не может продолжаться. Я нашел что-то, что говорит о том, что объединение @"\\?\" позволяет увеличить число чахатчиков, но я не могу понять, как правильно его добавить. Моя доля принимает форму \\server\name, как и следовало ожидать.Помощь с размером пути к папке

Спасибо.

try 
{ 
    //Checks if the path is valid or not 
    if (!Directory.Exists(folder)) 
    { 
     return folderSize; 
    } 
    else 
    { 
     try 
     { 
      foreach (string filePath in Directory.GetFiles(folder)) 
      { 
       if (File.Exists(filePath)) 
       { 
        FileInfo finfo = new FileInfo(filePath); 
        folderSize += finfo.Length; 
       } 
      } 

      foreach (string dir in Directory.GetDirectories(folder)) 
       folderSize += GetDirectorySize(dir); 
     } 
     catch (NotSupportedException e) 
     { 
      Console.WriteLine("Unable to calculate folder size: {0}", e.Message); 
     } 
    } 
} 

исключение брошено после попытки предложенных ответов

'A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll 
'ShareSizes.vshost.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
Could not find file 'Shortcut to fileName'. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileInfo.get_Length() 
    at ShareSizes.Form1.button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\...line 50 
+0

Как вам попытаться совместить свой текущий путь с этими персонажами? –

+0

Строка s = Path.combine ("@" \\? \ ", FilePath) – James

+0

и что относительно' s = @ "\\? \" + FilePath'? Это работает? –

ответ

1

Вы можете просто сделать что-то вроде этого:

DirectoryInfo di = new DirectoryInfo(rootFolder); 
foreach (FileInfo finfo in di.GetFiles("*.*", SearchOption.AllDirectories) 
{ 
    folderSize += finfo.Length; 
} 
+0

выдает исключение, если есть ярлык не найти родителя для – James

0

попробуйте вместо этого:

string path = @"\\Server\Share"; 

System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(path); 
long totalSize = 0; 

foreach (FileInfo fInfo in dInfo.GetFiles("*", SearchOption.AllDirectories)) { 
    totalSize += fInfo.Length; 

} 

Console.Out.WriteLine(totalSize.ToString()); 
+0

, он выдает исключение, если есть ярлык, который он не может найти родителя для – James

+0

, вы имеете в виду ссылку на файл, который больше не существует? потому что он отлично работает ne для меня с мертвыми ярлыками – Seph

+0

Я обновил свое оригинальное сообщение, за исключением того, что был выброшен – James