0

C://root フォルダーを使用するアプリケーションがあります。このフォルダには画像が含まれています。これらの画像は、Pictureboxes によって読み取られます。

  1. 画像は Linux マシンから FTP で送信されます。Linux マシンは ftp を使用して、Windows にある C://root を開きます。IMAGE_1.jpg を保存します。
  2. IMAGE_1.jpg は、C# Windows フォーム アプリケーションによって読み取られ、ピクチャ ボックスに表示されます。

画像は Linux マシンから 10 秒ごとに送信されます。Windows はこれらの画像をスレッドで表示します。

場合によっては、Linux または Windows が例外を送信します。そのうちの1人が画像を読み取って表示しようとしている間(Windows)、もう1人が画像を保存しようとしている(Linux)

したがって、Image_1.jpg が Linux マシンで使用されている場合は、画像を win 形式で表示しようとしないでください。

しかし、どのように?

4

1 に答える 1

1

Win Forms アプリで、読み取り用にファイルを開き、ファイルを他のプロセスと共有して、ファイルの読み取り/書き込みを継続できるようにします。

これを行うには、File.Open メソッド (String、FileMode、FileAccess、FileShare)を使用します。

File.Open Method (String, FileMode)またはFile.Open Method (String, FileMode, FileAccess) のみを使用すると、ファイルは非共有になります。

共有することで、物事の ftp 側を幸せに保つ必要があります。

Windows でファイルを開こうとしているときに例外が発生した場合は、問題ありません。例外をキャッチして、すぐに再試行してください。

ファイルを正常に開いたら、最後の 2 バイトが FF D9 であるかどうかを確認します。この場合、JPG のアップロードは完了しています。

ここにいくつかの擬似コードがあります。


    success = false
    using (FileStream fs = File.Open(path,  // eg your Image1.jpg
                                     FileMode.Open,
                                     FileAccess.Read, // we just need to read
                                     FileShare.ReadWrite)) // important to share!
    {
       // if last two bytes are FF D9 then
       //    success = true... can display image now
    }
    if (!success)
    {
       // file is being uploaded, or some other problem occurred
       // try again later
    }

于 2013-03-21T11:21:10.690 に答える