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();
}
}
}
就是已经被别人的文件打开了.文件打开失败本来就是要做处理的
所有的io操作都应该考虑失败的情况.
应该不会啊 完整流程是 我上传是一个zip包,上传到服务器后解压zip 然后调用FindAllDir()方法 就是不会有其他人使用该文件 出现被占用的文件 一般就是 解压过后 里面的dll ,exe文件 而且是有时出现
@愛如風過: 明显就是杀毒软件在扫描exe和 dll文件呀,这个还需要想吗?
@XiaoFaye: 服务器上没有杀毒软件
@愛如風過: 会不会是Windows自带那个?只针对exe和dll,分明就是被扫描 了。
new FileStream(filePath, FileMode.Open,share...什么的枚举。)不然是文件独占锁
难道不能使用“插入代码”吗?