Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以允许多个程序同时读取同一个文件吗?_C++_C_Windows_File_Winapi - Fatal编程技术网

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,然后 > FDOPENT//COD> .<代码> -WfOpenOX())/Case>被记录为在非共享模式下打开文件:如果要指定文件应该是共享的,并且使用MS特定文件打开函数,则DOCS建议使用<代码> -WFSOpenOPEN()/CUT>。(如
\u wfopen\u s()
所示)。