2013-03-21 27 views
0

我有一個應用程序使用C://根文件夾。該文件夾包含圖像。這些圖像由Pictureboxes提供。讀取文件雖然它是由另一個進程wrince

  1. 圖像來自Linux機器通過FTP。一臺linux機器使用ftp打開窗口中的C://根目錄。保存IMAGE_1.jpg。
  2. IMAGE_1.jpg由C#窗體窗體應用程序支持顯示在圖片框中。

圖像來自linux機器每10秒鐘一次。 Windows在一個線程中顯示這些圖像。

有時,linux或windows發送異常。因爲雖然其中一個試圖讀取圖像來顯示(Windows),另一個試圖保存圖像(linux)

因此,我必須明白,如果Image_1.jpg被Linux機器使用,請不要嘗試以勝利形式顯示圖像。

但是如何?

+0

你能修改linux機器上的應用程序/腳本嗎? – azhrei 2013-03-21 09:54:35

+0

不,這是不可能的,linux機器是客戶端,windows是服務器,在應用程序中,這個必須在windows上保存 – 2013-03-21 09:55:44

+0

你是什麼意思「每10秒」? linux機器一次只能ftp一個文件,並且在完成上傳文件後,是否至少等待10秒鐘,然後開始上傳新文件? – azhrei 2013-03-21 10:05:07

回答

1

在您的Win Forms應用程序中,打開要讀取的文件,並與其他進程共享該文件,以便他們可以繼續讀取/寫入文件。

使用File.Open Method (String, FileMode, FileAccess, FileShare)來做到這一點。

如果您只是使用File.Open Method (String, FileMode)File.Open Method (String, FileMode, FileAccess)那麼該文件將被取消共享。

通過分享,你應該保持事物的快樂。

如果在嘗試打開W​​indows中的文件時出現異常 - 那很好。只要趕上例外情況並儘快再試。

當您成功打開文件時,檢查最後兩個字節是否爲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 
    } 

+0

親愛的azhrei,我只是這樣做之前,我問我的問題: using(FileStream ImgFileStream = new FileStream(Path,FileMode。打開,FileAccess.Read,FileShare.ReadWrite)) { RefImg = Image.FromStream(ImgFileStream); } 但是,我仍然從FTP端得到錯誤,有時候 – 2013-03-21 11:54:56

+0

ok - 聽起來我可能有幾個問題 - 爲什麼你不解釋你在FTP端看到的錯誤? (編輯您的原始問題) – azhrei 2013-03-21 12:09:03

+0

親愛的azhrei和Maxime Vernier,我改變了我的算法,改變了線程,並且還使用了關於fileaccess和fileshare的建議,這個組合解決了我的問題。非常感謝。 – 2013-03-21 14:15:35

相關問題