无法打开已由我的其他应用程序打开的文件

时间:2012-07-10 22:00:51

标签: .net windows winapi

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

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

虽然这个C ++应用程序打开了文件,但我正在尝试使用此代码打开它以便在C#app中阅读

var f = new StreamReader(path);

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

我试过

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

同样的结果。

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

1 个答案:

答案 0 :(得分:4)

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

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

相反,请说:

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