2010-09-22 3 views
1

есть ли способ выбросить новое исключение из максимального количества файлов в каталоге?Ошибка при максимальном количестве файлов

+4

Ваш вопрос очень расплывчатый. Пожалуйста, будьте более конкретными и прочитайте http://tinyurl.com/so-hints. –

+0

Что вы пытались сделать, когда вы нажимаете максимальное количество файлов в каталоге? Написание новых файлов? – chakrit

+0

Я предполагаю, что возникнет исключение или ошибка при создании следующего файла системой. Вы имеете в виду программный лимит? Что вы хотите сделать для этого исключения? Записать файл в другое место? Затем просто структурируйте свои каталоги заранее, чтобы избежать этой ситуации (с датой или некоторым счетчиком в имени каталога) ... – pascal

ответ

1

Нет, там нет ни:

вы можете поймать его с более общей

System.IO.IOException 

И прочитал (лежащий в основе) сообщение вы могли бы бросить самостоятельно написанное Исключение из этого момента.

ОБНОВЛЕНИЕ I just learned. что вы используете

bool isfull = info.GetFiles().LongLength == 4.294.967.295 

Недвижимость. К сожалению, он съест всю вашу память.

Поэтому использование

DirectoryInfo.EnumerateFiles().Count() 

возможно в фрагментированное образом может быть лучше подход

FYI:

  • 65.534 для FAT32
  • 4294967295 ДЛЯ NTFS

(source)

+0

Я предполагаю, что ваше приложение будет работать из ОЗУ, прежде чем когда-либо будет присвоено значение 'true' переменной' isFull'. Просто удерживая ссылки на эти 4 миллиарда записей в массиве, они будут потреблять 4 ГБ, и это исключает фактические строки ... –

+0

lol, я добавил объяснение. –

1

Я не знаю конкретно о C#, но я знаю, что Java не имеет конкретного исключения или ошибки для полного диска. Я предлагаю просто создать свой собственный класс исключений и использовать его. Я предлагаю назвать его FullDirectoryError или DirectoryOverflowError, предполагая, что он достаточно серьезен, чтобы его можно было назвать ошибкой.

0

Что-то вроде этого?

public static void checkFileNumber(string directoryToCheck, int maxNumber) 
{ 
    if (Directory.Exists(directoryToCheck)) 
    { 
     if (Directory.GetFiles(directoryToCheck).Length > maxNumber) 
     { 
      throw new Exception("Too many files in " + directoryToCheck); 
     } 
    } 
} 

Обязательно use System.IO; :-)

+0

Что такое максимальный номер каталога? – Ata

+0

Код, который я отправил, генерирует исключение, когда в каталогеToCheck больше, чем maxNumber файлов (реальных файлов, а не каталогов). –

+0

Теперь я понял: предел зависит от типа файловой системы. Быстрый набор выявил следующие ограничения: FAT16 512 записей, FAT32 65 534 записей, NTFS 4 294 967 295 записей –

0

Бросание исключений - дорогое действие; когда вы можете избежать этого, сделайте это. Попробуйте запрограммировать защиту, если это возможно. Но когда вы бросаете один, вы должны предоставить соответствующий catch для определенного исключения.

Как сказал Каспер Клейн, вы можете поймать IOException, но почему в первую очередь вы хотите поймать в любом случае? Каково компенсирующее действие в улове?

Просьба предоставить дополнительную информацию о том, чего вы хотите достичь.

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