日期:2014-05-18  浏览次数:20925 次

异常:“文件“BTV_00036.bin”正由另一进程使用,因此该进程无法访问此文件。”



DirectoryInfo TheFolder = new DirectoryInfo(Utils._receivePath);

FileInfo[] fileInfo = TheFolder.GetFiles();

foreach (string Key in dic_src.Keys) //比较原字典和目标字典
{
  if (!dic_dst.ContainsKey(Key))
  {
  MessageBox.Show("文件内容有错误!"); //如果原字典和目标字典的MD5值不一致,提示错误
  return;
  }
}
dic_src.Clear();
dic_dst.Clear();
Thread.Sleep(2000);
for (uint i = 0; i < fileInfo.Length; i++)  
  fileInfo[i].Delete(); //如果原字典和目标字典的MD5值一致,删除接收文件夹的文件 


我这个程序是给一个发送设备写的测试工具,这个测试工具能自动生成随机二进制文件,电脑连着发送设备的话,发送设备会自动去生成文件的目录读取文件,然后发送到指定目录(本应连着串口测试,因为现在还在修改这个测试工具,所以我先用手动拷贝),然后我需要这个测试工具能跑去指定的接收目录检查是否完整接收到了发送的文件(限定每一轮发50个文件),如果完整接收,那就比较接收文件的MD5值和发送文件的MD5值是否一致(就是正确性检查),如果一致,那么删除接收目录的这50个文件,开始下一轮的发送接收
现在的问题是,我用手动拷贝,fileInfo[i].Delete()这句抛出异常:“文件“BTV_00036.bin”正由另一进程使用,因此该进程无法访问此文件。” 然后我去接收目录看,删了一部分,还有一部分没删,不知道这是怎么回事

------解决方案--------------------
你怎么读取的md5,是不是去读md5时,有文件流未释放
------解决方案--------------------
你的 foreach 中最后就乜嘢steam.Close(),这样至少对于最后读取的文件,流未释放
加上Close