【发布时间】:2015-05-27 20:45:42
【问题描述】:
所以我尝试以增量方式填充媒体设备并测量速度,直到我将数据从 75% 写入到 95%(我们没有完全填充)
当我去设置文件长度时(例如:当磁盘有 3.72 GB 可用时,我试图制作一个 3.1GB 的文件,我得到以下异常
“参数不正确。”
堆栈跟踪
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.SeekCore(Int64 offset, SeekOrigin origin)
at System.IO.FileStream.SetLengthCore(Int64 value)
at System.IO.FileStream.SetLength(Int64 value)
at DiskSpeed.Write.WriteFileFromMemory(Byte[] buffer, String path, Int64 fileSize, Int32 currentIteration, Int32 totalIterations, CancellationToken ct)
这是代码
using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None, 8, FileOptions.WriteThrough | FileFlagNoBuffering))
{
fs.SetLength(fileSize);
.......
}
我正在使用它以 25% 的增量将块写入可移动媒体,但在 75% 之后,我只写入 20% 的块。从 0-75% 可以正常工作,这是引发此错误的最后一个块。是的,我已经仔细检查了文件大小,还有空间!!!
有人有什么想法吗?我不知所措,似乎在网上找不到任何东西。
【问题讨论】:
-
根据documentation 一个流必须同时支持写入和寻找 SetLength 才能工作。,但我在你的例子中看不到任何关于寻找的东西......不是确定这是否有帮助。
-
异常的确切类型是什么?
-
当您呼叫
SetLength时,fileSize是什么? -
看一下:stackoverflow.com/a/1374156/461810 可能有问题,可能是这个标志引起的问题
-
当您使用 FileFlagNoBuffering 选项(不管拼写错误)时,您的工作就是确保您寻找的位置是卷扇区大小的整数倍。 “95%”并不是一个很好的衡量标准。