首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当文件被另一个进程写入时读取它

问当文件被另一个进程写入时读取它
EN

Stack Overflow用户
提问于 2013-03-21 09:45:11
回答 1查看 200关注 0票数 0

我有一个应用程序使用C://root文件夹。此文件夹包含图像。这些图片由图片框读取。

  1. 图像是通过FTP从linux机器上传来的。linux机器使用ftp打开windows中的C://root。保存IMAGE_1.jpg。
  2. IMAGE_1.jpg由C# windows窗体应用程序读取,以显示在picturebox中。

每10秒就会有来自linux机器的图像。Windows在线程中显示这些图像。

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

因此,我必须理解,如果linux使用Image_1.jpg,不要试图以win形式显示图像。

但是怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2013-03-21 11:21:10

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

使用File.Open方法(String,FileMode,FileAccess,FileShare)进行此操作。

如果您只使用File.Open方法(String,FileMode)或File.Open方法(String,FileMode,FileAccess),那么文件将被取消共享。

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

如果在Windows中打开文件时遇到异常,那就好了。抓住这个异常,很快再试一次。

成功打开文件时,请检查最后两个字节是否为FF D9。在这种情况下,您的JPG已经完成上传。

这是一些伪代码。

代码语言:javascript
复制
    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
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15543997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档