我一直很难弄清楚如何在程序中检查pdf文档当前是否打开。这是一个大问题,因为我的程序为我的客户创建pdf文档,但我的客户通过打开文档来查看她的文档,并试图在pdf文档打开时修复任何拼写错误,导致程序崩溃并失去很多进度。我尝试了几种方法来检测程序是否打开,但都无济于事。
该程序是一个C#桌面应用程序,用于使用itextsharp创建pdf文档。
有人能给我一份声明吗?我可以用它来检查pdf是否打开或被另一个进程使用?在这个问题解决之前,我的客户不能继续她的工作。
您应该像对待任何类型的文件一样执行此操作。
protected virtual bool IsFileInUse(FileInfo file)
{
try
{
FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
stream.Dispose();
}
catch (IOException)
{
//Could not access because file is in use.
return true;
}
//file is not in use
return false;
}
FileShare.None保证在您有访问权限时,其他人不能打开文件进行修改。
注意:如果读取器加载了文件流,然后关闭了文件,则此操作可能不起作用。但我想这对你来说不是问题。
这是我以前在项目中使用过的一种方法,用于确保文件是否正在使用:
bool IsAvailable(string path)
{
try
{
if (File.Exists(path))
using (File.OpenRead(path))
{
return true;
}
else
return false;
}
catch (Exception)
{
Thread.Sleep(100);
return InUse(path);
}
}
它一直等到文件可用(未使用(。如果在catch
中返回false
,而不是再次递归调用该方法,它只会检查一次。
此外,如果文件不存在,上面的代码将返回false。因此,如果你不需要,也可以删除该部分:
bool IsAvailable(string path)
{
try
{
using (File.OpenRead(path))return true;
}
catch {}
return false;
}