首页 新闻 会员 周边

为什么在调用getFileHash方法时 会出现一定几率的 文件被占用 的异常

0
悬赏园豆:10 [待解决问题]

public void FindAllDir(int ProgramId, string FilePath, string strPRE)
{

 

if (FilePath == "" || !Directory.Exists(FilePath))
{
return;
}
else
{
try
{
DirectoryInfo di = new DirectoryInfo(FilePath);
FileInfo[] fis = di.GetFiles();
foreach (FileInfo fi in fis)
{
//略
[color=#FF0000] //为什么在调用getFileHash方法时 会出现一定几率的 文件被占用 的异常[/color]
modelProgramFile.PFL_MD5 = getFileHash(fi.FullName);
//略

}
DirectoryInfo[] dis = di.GetDirectories();
foreach (DirectoryInfo diInfo in dis)
{
//略
FindAllDir(ProgramId, diInfo.FullName, strPRE);
}

}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}

public static string getFileHash(string filePath)
{

using (MD5 md5 = MD5.Create())
{
using (FileStream file = new FileStream(filePath, FileMode.Open))
{
byte[] hashByte = md5.ComputeHash(file);
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < hashByte.Length; i++)
{
sBuilder.Append(hashByte[i].ToString("x2"));
}
string result = sBuilder.ToString();
return result.ToUpper();
}
}
}

愛如風過的主页 愛如風過 | 初学一级 | 园豆:194
提问于:2016-10-04 08:55
< >
分享
所有回答(3)
0

就是已经被别人的文件打开了.文件打开失败本来就是要做处理的

所有的io操作都应该考虑失败的情况.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-10-04 09:00

应该不会啊 完整流程是 我上传是一个zip包,上传到服务器后解压zip  然后调用FindAllDir()方法  就是不会有其他人使用该文件   出现被占用的文件 一般就是 解压过后 里面的dll ,exe文件   而且是有时出现

支持(0) 反对(0) 愛如風過 | 园豆:194 (初学一级) | 2016-10-04 09:06

@愛如風過:  明显就是杀毒软件在扫描exe和 dll文件呀,这个还需要想吗?

支持(0) 反对(0) XiaoFaye | 园豆:3087 (老鸟四级) | 2016-10-04 09:22

@XiaoFaye: 服务器上没有杀毒软件

支持(0) 反对(0) 愛如風過 | 园豆:194 (初学一级) | 2016-10-04 10:33

@愛如風過: 会不会是Windows自带那个?只针对exe和dll,分明就是被扫描 了。

支持(0) 反对(0) XiaoFaye | 园豆:3087 (老鸟四级) | 2016-10-04 11:31
0

 new FileStream(filePath, FileMode.Open,share...什么的枚举。)不然是文件独占锁

czd890 | 园豆:14412 (专家六级) | 2016-10-04 15:36
0

难道不能使用“插入代码”吗?

顾晓北 | 园豆:10844 (专家六级) | 2016-10-08 10:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册