代码:
FileOptions nocash = (FileOptions)0x20000000;
FileStream fs;
byte[] data;
int x = 32 * 1024;
public Form1()
{
InitializeComponent();
fs = new FileStream(@"C:UsersiPDocumentsvisual studio 2015ProjectsConsoleApplication32ConsoleApplication32binDebughello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, x, FileOptions.Asynchronous|nocash);
data = new byte[x];
}
private void Form1_Load(object sender, EventArgs e)
{
}
private async void button1_Click(object sender, EventArgs e)
{
int i = 0;
double pos = 0;
try
{
while (await fs.ReadAsync(data, 0, x) > 0)
{
i++;
if (i == 27013)
{
pos = fs.Length - fs.Position;
}
}
}
catch (Exception ex)
{
textBox2.AppendText(pos.ToString()+" "+fs.Position.ToString() + " "+fs.Length.ToString() );
}
}
我正在尝试使用file_FLAG_NO_BUFFERING 读取文件
1-i将内部缓冲区设置为32kb
2-我设置了我将在其中读取的数组,它的长度=32kb=缓冲区长度
我在最后一次读取文件时得到错误"参数不正确">
- 27013是异常"参数不正确"之前while循环中最后一个循环中i的值
- pos=19123->文件中的剩余字节
但在异常后fs.position和fs.lengh具有相同的值,与pos的值相反
我的问题是:位于pos和fs.position之间的数据在哪里??
或者有办法读取文件中的剩余字节??
谢谢:(
x
值更改为fs.Length
data = new byte[fs.Length];
...
while (await fs.ReadAsync(data, 0, fs.Length) > 0)
更新
实际上错误如下:
System.Reflection.MemberInfo.get_CustomAttributes在此背景下。
原来不支持标志FILE_flag_NO_BUFFERING。查看此处了解更多信息:使用FileStream和file_FLAG_NO_BUFFERING 读取文件