我想将FILE_FLAG_NO_BUFFERING与FileStream一起使用,我对此进行了搜索并发现了这个问题[此处]:Reading a file with FileStream and FILE_FLAG_NO_BUFFERING
但是我听不懂(扇区大小)之类的词,无论如何,我之前都问过这个问题[]:FileStream.ReadAsync blocks UI if useAsync is true, but doesn't block UI if it's false
并且我在示例中回答了我的问题的代码
这是代码:
private async void button1_Click(object sender, EventArgs e)
{
FileOptions options = checkBox1.Checked ?
FileOptions.Asynchronous | (checkBox2.Checked ? (FileOptions)0x20000000 : FileOptions.None) :
FileOptions.None;
string _tempFileName = @"C:\Users\iP\Documents\Visual Studio 2015\Projects\ConsoleApplication32\ConsoleApplication32\bin\Debug\hello.txt";
int x = 32 * 1024; // the buffer size
using (Stream stream = new FileStream(_tempFileName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.Asynchronous|(FileOptions)0x20000000))
{
await _ReadAsync(stream, x ); // passing it to function
}
textBox1.Text = ";olkncdd";
}
private async Task _ReadAsync(Stream stream, int bufferSize)
{
byte[] data = new byte[bufferSize];
while (await stream.ReadAsync(data, 0, data.Length) > 0)
{
// empty loop
textBox1.AppendText("it is reading");
}
// when While loop finish i get error " the parametere is incorrect "
}
我在while循环结束时收到错误(此错误与任何缓冲区大小有关)错误
mscorlib.dll中发生'System.IO.IOException类型的异常,但未在用户代码中处理
其他信息:参数不正确。
仅当我仅使用FILE_FLAG_NO_BUFFERING时,才会出现此错误
有人可以帮助我吗?
谢谢:)
ArgumentException
:“偏移量和计数之和大于缓冲区长度。” -https://docs.microsoft.com/en-us/dotnet/api/system.io.filestream.readasync但是使用多任务处理,任何可以设想的和几个
无法想象的代码段都会在竞态条件上引发此异常。就在最近,我们List<T>.AddRange()
从他的调用堆栈的深处抛出了一个异常-因为在增长后端列表和复制新值之间存在竞争。这是官方示例代码:
using (FileStream SourceStream = File.Open(filename, FileMode.Open))
{
result = new byte[SourceStream.Length];
await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
}
注意,结果是根据剩余长度(而不是固定数量)初始化的。他们试图一次全部得到。在这种情况下,“缓冲区”实际上可能是用词不当。