0

2 つの 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);
                        }
                    }
4

3 に答える 3

0

これは次の条件によって異なります。1)ユーザーから独立したシステムの内部にあるプロセスですか。もしそうなら、あなたはファイルをロックしているものを見つけて、明示的に待つべきです。ランダムに待機してから何度も試行すると、それ自体で問題が発生する可能性があります。

2)ファイルを開いている可能性があるのはユーザーですか?この場合、ユーザーが突然その日に出発したため、システムが週末中ずっと再試行する可能性があるため、待機は役に立ちません。ユーザーのタイミングを制御することはできません。ファイルが開いているため、要求された操作を実行できないことをユーザーに伝えて、再試行してもらいます。

通常、N秒/分待つことは実際には解決策ではありません。問題が何であるかを知っていて、問題をポーリングして解決するか、実際には何もできず、通知を送信するだけです。

于 2010-03-30T21:22:45.480 に答える
0

これを行うための特別な機能はありません。実際、この機能が存在する場合でも、一部のプロセスでは、「ロックチェック」と「ファイルオープン」の間でこのファイルを簡単にロックできます。

于 2010-03-30T21:27:00.010 に答える
0

ファイル操作を再試行する前に数回のクリックでスリープするように、タイマーを追加する必要があります。

また、無期限に待機せず、たとえば 15 回試行した後に終了するように、カウンターが必要です。

于 2010-03-30T21:20:03.143 に答える