写入约291GB.gz文件遇文件系统限制错误,求StreamWriter解决方案
写入大体积.gz文件时触发文件系统限制错误
当向.gz文件写入数据,文件大小达到约291,261,644,800字节时,触发错误:
请求的操作因文件系统限制无法完成
对应的调用栈如下:
at System.IO.Strategies.BufferedFileStreamStrategy.WriteSpan(ReadOnlySpan`1 source, ArraySegment`1 arraySegment) at System.IO.Strategies.BufferedFileStreamStrategy.Write(Byte[] buffer, Int32 offset, Int32 count) at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) at System.IO.StreamWriter.WriteLine(String value)
核心代码示例
using var reader = new StreamReader(inputFilename); using var writer = new StreamWriter(new GZipStream(File.Create(outputFilename), CompressionMode.Compress)); while ((line = reader.ReadLine()) != null) { // 处理line writer.WriteLine(line); }
已完成排查
- 存储分区为NTFS格式,且未存满
- 输出文件未被其他程序锁定或打开
当前临时方案及问题
目前临时解决方案是将数据写入多个小文件,之后在Linux系统中用cat命令合并,但该方式耗时翻倍,且会将原本约500GB的文件所需存储量翻倍,并不理想。怀疑使用StreamWriter时存在疏漏。
更新1:尝试预分配空间仍未解决
尝试以下代码指定预分配500GB空间,但仍遇到相同错误:
var options = new FileStreamOptions { Access = FileAccess.Write, Mode = FileMode.Create, PreallocationSize = 500000000000 // 500 GB }; using var writer = new StreamWriter(filename, options);
内容的提问来源于stack exchange,提问作者Dr. Strangelove
相关产品推荐
相关产品推荐

