c#-具有文件"U标志"U否"缓冲的FileStream,其中「;上次读取后的剩余数据;是去还是不去?
代码: 我正在尝试读取带有文件\u标志\u无缓冲区的文件 1-我将内部缓冲区设置为32kb 2-我设置了我将在其中读取的数组,它是lengh=32kb=buffer lengh 我在上次读取的文件中得到错误“参数不正确”c#-具有文件"U标志"U否"缓冲的FileStream,其中「;上次读取后的剩余数据;是去还是不去?,c#,asynchronous,filestream,C#,Asynchronous,Filestream,代码: 我正在尝试读取带有文件\u标志\u无缓冲区的文件 1-我将内部缓冲区设置为32kb 2-我设置了我将在其中读取的数组,它是lengh=32kb=buffer lengh 我在上次读取的文件中得到错误“参数不正确” 27013是在异常“参数不正确”之前的while循环中最后一次循环中的i值 pos=19123->文件中的剩余字节 但异常后fs.position和fs.lengh的值相同,而pos的值相反 我的问题是:pos和fs.position之间的数据在哪里 或者有办法读取文件中的
- 27013是在异常“参数不正确”之前的while循环中最后一次循环中的i值
- pos=19123->文件中的剩余字节
解决方案:
将变量
x
值更改为fs.Length
或
data=新字节[fs.Length]代码>
…
while(等待fs.ReadAsync(数据,0,fs.Length)>0)
更新
实际上,错误如下:
无法在中调用System.Reflection.MemberInfo.get\u CustomAttributes
这个背景
结果是不支持标志文件\u flag\u NO\u缓冲。查看此处了解更多信息:
是的,是的,我知道,但我使用的是文件标志缓冲,它有读取数据的要求,其中一个要求是“我必须读取的字节数是卷扇区大小的倍数,请检查此项,因此我只能读取除(512、102420484096)以外的任何数字”
FileOptions nocash = (FileOptions)0x20000000;
FileStream fs;
byte[] data;
int x = 32 * 1024;
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, 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() );
}
}