1

次のコードを使用して、毎回新しく作成する圧縮ファイルに書き込みます。

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 が発生します。ただし、ファイルを書き込んでいるドライブには 19GB の空き容量があります。

GZipStream のドキュメントによると、4GB を超えるファイルの書き込みには使用できません。ただし、これまでに書き込まれたファイルのサイズはわずか 250MB です。

例外は次のとおりです。

タイプ: System.IO.IOException 例外メッセージ: ディスクに十分なスペースがありません。

内部例外: StackTrace: System.IO.__Error.WinIOError(Int32 errorCode, String MaybeFullPath) で System.IO.FileStream.WriteCore(Byte[] バッファー、Int32 オフセット、Int32 カウント) で System.IO.FileStream.FlushWrite(Boolean) calledFromFinalizer) で System.IO.FileStream.Dispose(Boolean disposing) で System.IO.Stream.Close() で System.IO.Compression.DeflateStream.Dispose(Boolean disposing) で System.IO.Stream.Close() で System.IO.Stream.Close() .IO.Compression.GZipStream.Dispose(Boolean disposing) at System.IO.Stream.Close() at System.IO.StreamWriter.Dispose(Boolean disposing) at System.IO.StreamWriter.Close()

また、これはネットワーク ファイルではありません。

ここで私が間違っていることはありますか?

4

2 に答える 2

0

このメッセージは、ユーザーに割り当てられたディスク クォータに達した場合に表示されることがあります。

管理者は、[マイ コンピュータ] でディスクを右クリックし、[プロパティ] を選択し、[クォータ] タブを使用して、ユーザーごとのクォータを設定できます。

クォータが無効になっていること、またはアプリケーションを実行しているユーザーに十分なクォータがあることを確認してください。

于 2010-02-21T22:46:17.100 に答える
0

FileShare モードを Exclusive に変更して違いがあるかどうかを確認してください。FileShare が読み取り/書き込みに設定されている理由がわかりません。その説明は、圧縮するとき、gzipが正しく機能するためにファイルを排他的にする必要があります...

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-02-21T22:58:25.243 に答える