Помогите с размером пути к папке - PullRequest
0 голосов
/ 21 сентября 2011

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

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

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

DirectoryInfo di = new DirectoryInfo(rootFolder);
foreach (FileInfo finfo in di.GetFiles("*.*", SearchOption.AllDirectories) 
{
   folderSize += finfo.Length;  
}
0 голосов
/ 21 сентября 2011

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

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());
...