代码之家  ›  专栏  ›  技术社区  ›  feroze

.NET GZipStream和磁盘空间不足异常

  •  1
  • feroze  · 技术社区  · 14 年前

    我使用下面的代码来编写压缩文件,每次都会创建新的压缩文件。

    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:at System.IO.\u Error.WinIOError(Int32错误代码,字符串可能为fullpath) 在System.IO.FileStream.WriteCore(Byte[]buffer,Int32 offset,Int32 count) 在System.IO.FileStream.FlushWrite(布尔值调用的FromFinalizer) 位于System.IO.FileStream.Dispose(布尔值disposing) 在System.IO.Stream.Close() 位于System.IO.Compression.DeflateStream.Dispose(布尔值disposing) 在System.IO.Stream.Close() 在System.IO.Compression.GZipStream.Dispose(Boolean disposing) 在System.IO.Stream.Close() 位于System.IO.StreamWriter.Dispose(布尔值disposing) 位于System.IO.StreamWriter.Close()

    而且,这不是网络文件。

    你知道我在这里做错了什么吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Jason Kresowaty    14 年前

    如果已达到分配给用户的磁盘配额,则会显示此消息。

    管理员可以通过右键单击“我的电脑”中的磁盘,选择“属性”,然后使用“配额”选项卡来设置每个用户的配额。

    验证配额是否已禁用,或者应用程序正在运行的用户是否具有足够的配额。

        2
  •  0
  •   t0mm13b    14 年前

    将文件共享模式更改为exclusive,以查看这是否有影响,我不明白为什么文件共享设置为读/写?对此的任何解释,在压缩时,该文件应该是gzip正常工作所独有的。。。

    希望能帮上忙, 谨致问候, 汤姆。