2010-02-05 1 views
1

Я использую следующий код для записи в сжатый файл, который я создаю каждый раз каждый раз..NET GZipStream и исключение из дискового пространства

using (FileStream fs = File.Open(sortOrderFileName, FileMode.Create,FileAccess.Write, FileShare.ReadWrite)) 
using (System.IO.Compression.GZipStream gzip = new System.IO.Compression.GZipStream(fs, System.IO.Compression.CompressionMode.Compress)) 
using (StreamWriter sw = new StreamWriter(gzip)) 
{ 
    // use the streamwriter sw to write to the stream 
} 

Однако, когда я запускаю это, я получаю исключение IOException с сообщением «Из дискового пространства». Однако на диске, на котором я пишу файл, имеется 19 ГБ пространства.

В соответствии с документами для GZipStream он не может использоваться для записи файла размером более 4 ГБ. Однако файл, написанный до сих пор, составляет всего 250 МБ.

Вот исключение:

Тип: System.IO.IOException Исключение Msg: Существует не хватает места на диске.

Внутренняя Исключение: StackTrace: в System.IO .__ Error.WinIOError (Int32 ERRORCODE, String maybeFullPath) в System.IO.FileStream.WriteCore (байт [] буфера, Int32 смещение, Int32 счета) в системе. IO.FileStream.FlushWrite (Boolean calledFromFinalizer) в System.IO.FileStream.Dispose (Boolean) располагающей в System.IO.Stream.Close() в System.IO.Compression.DeflateStream.Dispose (булево утилизации) на System.IO.Stream.Close() at System.IO.Compression.GZipStream.Dispose (Boolean disposing) at System.IO.Stream.Close() at System.IO.StreamWriter.Dispose (Boolean disposing) at System.IO.StreamWriter.Close()

Кроме того, это не сетевой файл.

Любые идеи, что я делаю неправильно здесь?

+0

«на диске, на котором я пишу файл»: это локальный или сетевой диск? –

+0

Возможно, вам стоит показать дополнительный код. Три самих применения самих заявлений не похожи на то, что они вызовут проблему. И что такое исключение stacktrace? – Cheeso

ответ

0

Это сообщение может появиться, если достигнута квота диска, назначенная пользователю.

Администратор может установить квоту для каждого пользователя, щелкнув правой кнопкой мыши на диске в «Мой компьютер», выбрав «Свойства» и используя вкладку «Квота».

Проверьте, что квоты отключены, или что пользователь, на котором работает ваше приложение, имеет достаточную квоту.

+0

Да, как я уже упоминал, машина имеет много свободного места на диске, когда это происходит. Кроме того, пользовательская квота не исчерпывается. – feroze

0

Измените режим FileShare на эксклюзивный, чтобы узнать, не имеет значения, я не понимаю, почему FileShare настроен на чтение/запись? Любое объяснение этого при сжатии файла должно быть эксклюзивным для корректной работы gzip ...

Надеюсь, это поможет, С уважением, Tom.