2010-03-30 45 views
0

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

可能的重复:http://stackoverflow.com/questions/1563191/c-cleanest-way- to-write-retry-logic – 2010-03-30 21:24:32

+0

@aron:让我们知道上面的链接是否回答您的问题。它看起来不像你的问题的确切副本,但内容可能仍然有帮助。 – 2010-03-30 21:29:08

回答

0

,让你睡你应该添加一个定时器点几下再次尝试文件操作之前。

此外,你应该有柜台,所以你不会无限期地等待,并说你15次尝试后退出。

+2

他有一个例外的睡眠。我同意他应该有一个重试计数器。 – pestilence669 2010-03-30 21:22:47

0

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

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

通常等待N秒/分钟并不是真正的解决方案。要么你知道问题可能是什么,并且轮询&可以解决问题,或者你不能做任何事情,只是发出通知。

0

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

相关问题