C#如何检查pdf文件是否已打开(也使用itextsharp)

时间:2018-11-09 08:42:04

标签: c# pdf itext

我一直很难弄清楚如何在程序中检查pdf文档当前是否打开。这是一个主要问题,因为我的程序为我的客户创建了pdf文档,但是我的客户通过打开文档来查看其文档,并尝试在pdf文档打开时修复所有拼写错误,从而导致程序崩溃并失去了很多进展。我尝试了几种方法来尝试检测程序是否打开,但均无济于事。

该程序是一个C#桌面应用程序,用于通过使用itextsharp创建pdf文档。

有人可以给我一个声明,我可以用来检查pdf是否打开或被其他进程使用吗?在解决此问题之前,我的客户无法继续她的工作。

2 个答案:

答案 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;
 }