我一直很难弄清楚如何在程序中检查pdf文档当前是否打开。这是一个主要问题,因为我的程序为我的客户创建了pdf文档,但是我的客户通过打开文档来查看其文档,并尝试在pdf文档打开时修复所有拼写错误,从而导致程序崩溃并失去了很多进展。我尝试了几种方法来尝试检测程序是否打开,但均无济于事。
该程序是一个C#桌面应用程序,用于通过使用itextsharp创建pdf文档。
有人可以给我一个声明,我可以用来检查pdf是否打开或被其他进程使用吗?在解决此问题之前,我的客户无法继续她的工作。
答案 0 :(得分:1)
您应该像对待任何类型的文件一样进行操作。
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。没有人保证您可以访问,但没有其他人可以打开文件进行修改。
注意:如果阅读器加载了文件流然后关闭了文件,则此方法可能不起作用。但是我想这对您来说不是问题。
答案 1 :(得分:0)
这是我在项目中使用过的一种方法,可确保是否正在使用文件:
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;
}