Исключения GetDirectorySize - PullRequest
       13

Исключения GetDirectorySize

0 голосов
/ 06 апреля 2010

Я хочу создать функции, которые получают размер папки. Я пишу небольшую функцию:

private: unsigned long long GetDirectorySize(String^ path) {
    unsigned long long size = 0;
    DirectoryInfo^ diBase = gcnew DirectoryInfo(path);
    if (!diBase->Exists) return 0;
    array <FileInfo^>^ files;
    array <FileSystemInfo^>^ files2;
    try {
        files = diBase->GetFiles("*", SearchOption::TopDirectoryOnly);
        for each(FileInfo^ file in files) {
            size += file->Length;
        }
    }
    return size;
}

Но иногда функция возвращает исключение. это DirectoryNotFoundException и UnauthorizedAccessException, я хочу переписать эту функцию. Эта функция просто пропустила файл или папку, вызвавшую это исключение. Как это сделать?

1 Ответ

1 голос
/ 06 апреля 2010

DirectoryNotFoundException - это ошибка в вашем коде, вы делаете что-то не так с вашим путем. UnauthorizedAccessException достаточно распространен, некоторые каталоги вы не можете прочитать, даже с правами администратора. Например, информация о системном томе c: \ хранит данные о точках восстановления, скрытые от всех.

Обратите внимание на DirectoryInfo.Attributes. Избегайте повторения в любой каталог, имеющий атрибуты System и Hidden. Это позволит избежать подавляющего большинства исключений безопасности. Для остальных требуется GetAccessControl (), чтобы проверить ACL и убедиться, что у пользователя есть права на чтение. Быстрое исправление такого неуклюжего кода ловит исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...