带有FILE_FLAG_NO_BUFFRING的FileStream,ReadAsync()可以读取小于缓冲区的任何字节数

我阅读了有关文件缓冲的这篇文章:https://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering

我读了requirements for using FILE_FLAG_NO_BUFFERING

这是我的代码:

FileOptions nocash = (FileOptions)0x20000000;
FileStream fs;
byte[] data;

public Form1()
{
    InitializeComponent();
    fs = new FileStream(@"C:\Users\iP\Documents\visual studio 2015\Projects\ConsoleApplication32\ConsoleApplication32\bin\Debug\hello.txt",FileMode.OpenOrCreate,Fileaccess.ReadWrite,FileShare.ReadWrite,8192,FileOptions.Asynchronous|nocash);
    data = new byte[5968];
}

private async void button1_Click(object sender,EventArgs e)
{
    await fs.ReadAsync(data,5968);
    byte[] ff = new byte[6] { data[5942],data[2435],data[2313],data[213],data[343],data[3698],};
    string hh = Encoding.Default.GetString(ff);
    Text = hh;
}

我读到了

  

使用FILE_flaG_NO_BUFFERING打开的文件时,应用程序必须满足某些要求。适用以下细节:

     

文件访问大小(包括OVERLAPPED结构中的可选文件偏移量)(如果已指定)必须用于字节数,该字节数是卷扇区大小的整数倍。例如,如果扇区大小为512字节,则应用程序可以请求512、1,024、1,536或2,048字节的读写,但不能请求335、981或7,171字节的读写。

但是我注意到我可以读取任意数量的字节(如果它小于内部缓冲区)。

有人可以向我解释吗?

zmmll 回答:带有FILE_FLAG_NO_BUFFRING的FileStream,ReadAsync()可以读取小于缓冲区的任何字节数

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3101103.html

大家都在问