c# - c# - 带有 FILE_FLAG_NO_BUFFRING 的 FileStream , ReadAsync() 可以读取小于缓冲区的任意字节数
问题描述
我读了这篇关于文件缓冲的文章:https ://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering
我阅读了使用要求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,0,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 字节。
但我注意到我可以读取任意数量的字节(如果它小于内部缓冲区)。
谁能给我解释一下?
解决方案
推荐阅读
- javascript - 高中项目的javascript基本碰撞功能
- bash - Bash - 读入一个文件并用一个逗号替换多个空格
- jquery - Laravel - 除非浏览器刷新或直接访问页面,否则脚本将无法运行
- react-native - 使用 react-native-fcm 正确设置
- python-3.x - 为什么尽管给出了完整的邮件范围,我仍然收到权限不足的错误?
- c# - WPF C# Ninject 与 mainViewModel 和多个 viewmodel 问题
- c# - 尝试从第三方 api 同步数据
- elasticsearch - 如何为多值属性添加动态范围过滤器?
- ssh - 通过 SSH 在两个远程节点之间复制文件而不通过控制器
- reactjs - React Native - FlatList 的应用程序性能问题?