C++ 我可以允许多个程序同时读取同一个文件吗?
我有一个应用程序,它读取一组数据文件并执行一些模型计算。程序本身不需要修改数据文件,因此我当前使用只读标志打开它们,如下所示:C++ 我可以允许多个程序同时读取同一个文件吗?,c++,c,windows,file,winapi,C++,C,Windows,File,Winapi,我有一个应用程序,它读取一组数据文件并执行一些模型计算。程序本身不需要修改数据文件,因此我当前使用只读标志打开它们,如下所示: FILE* file; if(_wfopen_s(&file, fname.c_str(), L"r") == 0) ... 我想让我的程序的几个实例同时运行,使用相同的数据集,但对数据执行不同的计算。我的所有程序都不需要修改数据文件。由于数据文件非常大,我无法为每个程序制作单独的数据副本 我假设因为我正在以只读权限打开文件,所以两个程序可以同时从同一个文件中
FILE* file;
if(_wfopen_s(&file, fname.c_str(), L"r") == 0)
...
我想让我的程序的几个实例同时运行,使用相同的数据集,但对数据执行不同的计算。我的所有程序都不需要修改数据文件。由于数据文件非常大,我无法为每个程序制作单独的数据副本
我假设因为我正在以只读权限打开文件,所以两个程序可以同时从同一个文件中读取。相反,我得到了各种各样的错误,比如“文件无法打开,因为它正被另一个进程使用”
由于我的开发环境是Windows 7。然而,该线程中的所有答案都依赖于,而我处理的是使用stdio.h编写的遗留代码
有没有一种方法可以让多个程序使用fopen函数类同时从一个文件中读取?如果您可以更改
fopen
例程,然后尝试将fopen
调用替换为,用于共享读/写<代码>\u fsopen是mscrt特定的
如果您可以使用
CreateFile
,并且不想重新写入所有旧代码进行读/写,那么您也可以尝试将文件*
与winapi文件句柄关联。使用从CreateFile
返回的文件句柄获取文件描述符,然后使用从该文件描述符获取文件*
。我认为除了使用CreateFile()之外没有其他方法。问题是如何从句柄获取文件*。您也可以使用std::ifstream。。所有这些都被标记为C++ +“PalaNyx:<代码> OpOpenOsOfHuffs,然后\u wfopen\u s()
所示)。