2010-01-11 3 views
3

Какое исключение выбрано в .NET Framework при попытке записать файл, но диск заполнен?Вызывается ли исключение IO, если диск заполнен?

Записывает ли файл буфера Windows?

+3

Почему бы вам не попробовать и не видеть - подключите USB-накопитель и продолжайте писать мусор, пока не закончите пространство и не увидите, что произойдет. Я подозреваю, что вы получите управляемое «IOException» в записи, которое перенесет его за лимит, поскольку процесс буферизации должен быть непрозрачным для управляемого кода. – Keith

+1

еще лучше, дискета! –

+0

C# - язык программирования - он ничего не делает из-за полной файловой системы. Вы имеете в виду «Исключение исключения IO в .NET get throw ...» –

ответ

6

вы получите исключение ввода-вывода:

System.IO.IOException: There is not enough space on the disk. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 

System.IO библиотека обрабатывает актуальные задачи чтения и записи на диск и оборачивает их в управляемом коде, так что вы не должны получить никаких неуправляемых исключений с помощью их.

Это также стоит попробовать (с одним из этих дрянных маленьких USB-накопителей, которые они выдают повсюду), чтобы узнать, что происходит с вашим кодом - это, как правило, лучший способ узнать об этом.

+0

Я также хотел бы узнать ответ точно, КОГДА исключение будет вызвано –

+2

Когда диск заполнен? – tster

+1

Исключение будет выбрано при попытке выполнить операцию записи (или открыть файл для записи, я думаю) на полном диске. Операции чтения на полном диске не будут генерировать исключение. – Keith

0

Вы можете проверить Win 32 Exception после того, что у вас есть не в состоянии увидеть, если это дает более подробную информацию:

 Win32Exception ex = new Win32Exception(); 
    string low_level_error = ex.Message; 

Как вы пишете на диск? Для FileStream он говорит:

«Обязательно вызовите метод Dispose на все объекты FileStream, особенно в средах с ограниченным пространством на диске Выполнение операций ввода-вывода может поднять исключение, если нет места на диске . доступно, а метод Dispose - , который не вызывается до того, как FileStream завершил . "