【发布时间】:2012-07-18 23:55:51
【问题描述】:
我有一个应用程序可以读取一组数据文件并执行一些模型计算。程序本身不需要修改数据文件,所以我目前使用只读标志打开它们,如下所示:
FILE* file;
if(_wfopen_s(&file, fname.c_str(), L"r") == 0)
...
我想让我的程序的多个实例同时运行,使用相同的数据集,但对数据执行不同的计算。我的程序都不需要修改数据文件。由于数据文件非常大,我无法为每个程序制作单独的数据副本。
我假设因为我以只读权限打开文件,所以两个程序可能同时从同一个文件中读取。相反,我收到各种错误,例如“文件无法打开,因为它正在被另一个进程使用”。
由于我的开发环境是 Windows 7,this question suggests it might be a matter of enabling read sharing。但是,该线程中的所有答案都依赖于CreateFile,而我正在处理使用 stdio.h 编写的遗留代码。
有没有一种方法可以让多个程序使用 fopen 函数类同时从一个文件中读取?
【问题讨论】:
-
我认为除了使用 CreateFile() 之外别无他法。问题是如何从 HANDLE 中获取 FILE*。
-
你也可以使用std::ifstream ..毕竟这被标记为c++?
-
@Paranaix:
_open_osfhandle,然后是_fdopen。 -
_wfopen_s()被记录为以非共享模式打开文件:msdn.microsoft.com/en-us/library/z5hh6ee9.aspx 文档建议使用_wfsopen()如果您想指定文件应该是可共享的并且可以使用 MS - 特定的文件打开函数(如_wfopen_s()一样)。