.NET GZipStream и исключение нехватки дискового пространства - PullRequest
1 голос
/ 05 февраля 2010

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

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 Сообщение об исключении: на диске недостаточно места.

Внутреннее исключение: StackTrace: в System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath) в System.IO.FileStream.WriteCore (буфер Byte [], смещение Int32, количество Int32) в System.IO.FileStream.FlushWrite (Boolean namedFromFinalizer) в System.IO.FileStream.Dispose (логическое удаление) в System.IO.Stream.Close () в System.IO.Compression.DeflateStream.Dispose (логическое удаление) в System.IO.Stream.Close () в System.IO.Compression.GZipStream.Dispose (логическое удаление) в System.IO.Stream.Close () в System.IO.StreamWriter.Dispose (логическое удаление) в System.IO.StreamWriter.Close ()

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

Есть идеи, что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2010

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

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 22 февраля 2010

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

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

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

...