最安全的复制文件的方法

时间:2010-03-30 21:17:14

标签: pdf-generation ioexception pdfsharp filelock

我需要合并两个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);
                        }
                    }

3 个答案:

答案 0 :(得分:0)

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

此外,你应该有反击,这样你就不会无限期地等待,并在你说15次尝试后退出。

答案 1 :(得分:0)

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

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

通常等待N秒/分钟并不是真正的解决方案。要么你知道问题可能是什么,民意调查和解决问题,或者你无法做任何事情,只是发出通知。

答案 2 :(得分:0)

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