读取文件时由另一个进程写入

时间:2013-03-21 09:45:11

标签: file sametime

我有一个应用程序使用C://根文件夹。此文件夹包含图像。这些图像由Pictureboxes引导。

  1. 图像来自Linux机器的FTP。 linux机器使用ftp打开Windows中的C:// root。保存IMAGE_1.jpg。
  2. IMAGE_1.jpg由C#windows表单应用程序呈现,以显示在图片框中。
  3. 图像每10秒从linux机器出来。 Windows在一个线程中显示这些图像。

    有时,linux或windows发送异常。因为当其中一个试图读取图像显示(windows)时,另一个试图保存图像(linux)

    因此,我必须明白,如果Linux机器使用Image_1.jpg,请不要尝试以win形式显示图像。

    但是怎么样?

1 个答案:

答案 0 :(得分:1)

在Win Forms应用程序中,打开要读取的文件,并与其他进程共享该文件,以便他们可以继续读取/写入文件。

使用File.Open Method (String, FileMode, FileAccess, FileShare)执行此操作。

如果您只使用File.Open Method (String, FileMode)File.Open Method (String, FileMode, FileAccess),则该文件将取消共享。

通过分享,你应该保持ftp方面的事情快乐。

如果在尝试在Windows中打开文件时出现异常 - 那很好。抓住异常并尽快重试。

成功打开文件后,检查最后两个字节是否为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
    }