我可以允许多个程序同时读取同一个文件吗?

我有一个应用程序读取一组数据文件并执行一些模型计算。 该程序不需要修改数据文件本身,所以我现在打开它们的只读标志,如下所示:

FILE* file; if(_wfopen_s(&file, fname.c_str(), L"r") == 0) ... 

我想同时运行我的程序的几个实例,使用相同的一组数据,但对数据执行不同的计算。 我的程序都不需要修改数据文件。 由于数据文件非常大,我无法将每个程序的数据分别复制。

我认为,因为我打开具有只读权限的文件,两个程序可以同时读取同一个文件。 相反,我得到了各种各样的错误,“文件无法打开,因为它被另一个进程使用”。

由于我的开发环境是Windows 7, 这个问题表明这可能是一个启用阅读共享的问题 。 但是,该线程中的所有答案依赖于CreateFile ,而我正在处理用stdio.h编写的遗留代码。

有没有一种方法可以使用fopen类的函数同时从文件中读取多个程序?

Solutions Collecting From Web of "我可以允许多个程序同时读取同一个文件吗?"

如果您可以更改fopen例程,则尝试使用_fsopen替换fopen调用,以便共享读取/写入。 _fsopen是mscrt特定的。

如果您可以使用CreateFile ,并且不想重写所有遗留代码以进行读取/写入,也可以尝试将FILE *与一个winapi文件句柄相关联。 使用_open_osfhandleCreateFile返回的文件句柄中获取文件描述符,然后使用_fdopen从该文件描述符中获取FILE *