今天在做一个项目的时候发现了一个奇怪的问题。
首先定义了一个:public FileStream uploadFileSteam = null;
然后在程序中都是正常的套路:
SaveFileDialog fileDialog = new SaveFileDialog();
fileDialog.Filter = "txt files(*.txt)|*.txt|All files(*.*)|*.*";
if (fileDialog.ShowDialog() == true)
{
if (( uploadFileStream = (Filestream)fileDialog.Open()) != null)
{
}
}
else
{
return;
}
在另外一个进程中:
for (int uploadGroup = 0; uploadGroup < endGroup; uploadGroup++)
{
......... // 获得数据
// 开始写文件
uploadFileStream.Seek(0, SeekOrigin.End);
uploadFileStream.Write(revDataBuf, 0, revDataBuf.Length);
Array.Clear(revDataBuf, 0, revDataBuf.Length);
}
uploadFileStream.Close();
结果发现单步调试的时候第一遍循环不能写入文件,而从第二次循环开始都可以写入文件(直接打开文件就可以看到数据了)。
后来又测试了一下将上述红色的代码改成:
在循环的前部定义:
FileStream fs = new FileStream(uploadFileStream.Name, FileMode.Open, FileAccess.Write);
在循环中有如下代码:
long ps = fs.Position;
fs.Seek(ps, SeekOrigin.Begin);
fs.Write(revDataBuf, 0, revDataBuf.Length);
在循环外的后面:fs.Close();
结果与前面一致。
最后又做了如下的测试代码:
在循环中:
FileStream fs = new FileStream(uploadFileStream.Name, FileMode.Append, FileAccess.Write);
fs.Write(revDataBuf, 0, revDataBuf.Length);
fs.Close();
这回总算消停了,单步测试已经可以随我的意图一次一次的写入文件了。
不过,通过上面的测试,我还是不明白为啥前两次的方法不能在第一轮循环中写入文件,从代码来看没用任何问题,这又是一个新问题还是一个bug?