3 回答
TA贡献1780条经验 获得超3个赞
对于您面临的问题,只有解决方法。
开始复制之前,请检查文件ID是否正在处理中。您可以调用以下函数,直到获得False值为止。
第一种方法,直接从此答案复制:
private bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}
第二种方法:
const int ERROR_SHARING_VIOLATION = 32;
const int ERROR_LOCK_VIOLATION = 33;
private bool IsFileLocked(string file)
{
//check that problem is not in destination file
if (File.Exists(file) == true)
{
FileStream stream = null;
try
{
stream = File.Open(file, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (Exception ex2)
{
//_log.WriteLog(ex2, "Error in checking whether file is locked " + file);
int errorCode = Marshal.GetHRForException(ex2) & ((1 << 16) - 1);
if ((ex2 is IOException) && (errorCode == ERROR_SHARING_VIOLATION || errorCode == ERROR_LOCK_VIOLATION))
{
return true;
}
}
finally
{
if (stream != null)
stream.Close();
}
}
return false;
}
TA贡献1812条经验 获得超5个赞
这是一个旧线程,但我将为其他人添加一些信息。
我在编写PDF文件的程序中遇到了类似的问题,有时它们需要30秒才能呈现..这与我的watcher_FileCreated类在复制文件之前等待的时间相同。
文件未锁定。
在这种情况下,我检查了PDF的大小,然后等待2秒钟再比较新的大小,如果它们不相等,则该线程将休眠30秒钟,然后重试。
- 3 回答
- 0 关注
- 614 浏览
添加回答
举报