【问题标题】:Cannot open a file which is already opened by another my application无法打开已被另一个我的应用程序打开的文件
【发布时间】:2012-07-10 22:00:50
【问题描述】:

在 C++ WinAPI 应用程序中,我使用此代码打开文件

CreateFileW(path,FILE_APPEND_DATA,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

当此 C++ 应用程序打开文件时,我正在尝试使用此代码打开它以在 C# 应用程序中读取

var f = new StreamReader(path);

我得到 IOException "该进程无法访问该文件,因为它正被另一个进程使用"

我试过了

var fs = new FileStream(path, FileMode.Open,FileAccess.Read)

同样的结果。

我不明白为什么会这样。我在 C++ 应用程序的 CreateFile 中指定了 FILE_SHARE_READ。我打开它以用 C# 阅读。它必须在 C# 应用程序中打开。我究竟做错了什么? 同时notepad.exe可以打开这个文件

【问题讨论】:

    标签: .net windows winapi


    【解决方案1】:

    您在 C# 应用程序中使用的 FileStream constructor 使用 FileShare.Read 选项打开文件,相当于 FILE_SHARE_READ。

    这意味着当您打开文件时,允许其他程序打开文件进行读取,但不允许写入。但是您的 C++ 程序已经打开文件进行写入,因此您请求的共享模式不可用,并且尝试打开文件失败。

    改为这样说:

    var fs = 
      new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多