【问题标题】:Safest way to copy a file最安全的文件复制方式
【发布时间】:2010-03-30 21:17:14
【问题描述】:

我需要合并两个 PDF 文件。 但是有时文件可能会被锁定

我写了这段代码,但我想知道它是否不是最聪明的解决方案:

     private static int FILE_LOCKED_WAIT_PERIOD = 1000;
while (true)
                    {
                        // If the file is in use, IOException will be thrown.
                        // If file is not permitted to be opened because of Permission 
                        // Restrictions, UnauthorizedAccessException will be thrown.
                        // For all other, Use normal Exception.

                        try
                        {
                            inputDocument1 = PdfReader.Open(fileToMerge, PdfDocumentOpenMode.Import);

                            break;
                        }
                        catch (IOException)
                        {
                            Thread.Sleep(FILE_LOCKED_WAIT_PERIOD);
                        }
                        catch (UnauthorizedAccessException)
                        {
                            Thread.Sleep(FILE_LOCKED_WAIT_PERIOD);
                        }
                        catch (Exception)
                        {
                            Thread.Sleep(FILE_LOCKED_WAIT_PERIOD);
                        }
                    }

【问题讨论】:

  • @aron:如果上面的链接回答了您的问题,请告诉我们。它似乎与您的问题不完全相同,但内容可能仍然对您有所帮助。

标签: pdf-generation ioexception pdfsharp filelock


【解决方案1】:

您应该添加一个计时器,以便在再次尝试文件操作之前点击几下睡眠。

您还应该有计数器,这样您就不会无限期地等待,并且在尝试 15 次后退出。

【讨论】:

  • 他在异常时进入睡眠状态。我同意他应该有一个重试计数器。
【解决方案2】:

这取决于: 1)它是一个独立于用户的系统内部的进程吗?如果是这样,您应该尝试找出锁定文件的原因并明确等待。随机等待然后一遍又一遍地尝试可能会导致问题。

2) 是否是可能打开文件的用户?在这种情况下,等待是没有帮助的,因为系统可能会在整个周末重试,因为用户突然离开了一天。您无法控制用户时间。只需告诉用户您无法执行请求的操作,因为文件已打开并让他们重试。

通常等待 N 秒/分钟并不是真正的解决方案。要么你知道问题可能是什么,然后投票解决问题,要么你真的什么都做不了,只是发出通知。

【讨论】:

    【解决方案3】:

    没有特殊的功能可以做到这一点。实际上即使这个功能存在,一些进程仍然可以在你的“锁定检查”和“文件打开”之间轻松锁定这个文件

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2014-04-25
      相关资源
      最近更新 更多