gpt4 book ai didi

c++ - (Windows) 同时打开同一个文件

转载 作者:可可西里 更新时间:2023-11-01 13:26:52 26 4
gpt4 key购买 nike

我正在尝试在 Windows 中打开一个文件以同时写入和读取。我有一个程序(每一秒)写入文件和一个从文件中读取的程序。在 unix 中它可以正常工作,但在 windows 中不起作用(我无法打开已经打开的文件)。我用 fopen() 打开文件。

我该如何解决这个问题?

编辑 2:

查看 _fsopen它使用 FILE *,并相应地设置共享标志。

编辑:

首先,一些代码:这是我用来打开文件的方式

   FILE* f = NULL;
int res = fopen_s(&f, "c:\\temp\\File1.txt", "w");
if (res != 0) return;

while (true) {
Sleep(1000);
fprintf_s(f , "Some data");
}
fclose(f);

读取在其他应用程序中,但它执行了 fscanf

固定代码:

char d[] = "data";


HANDLE h = CreateFile("c:\\temp\\f.txt", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, /*FILE_ATTRIBUTE_NORMAL*/ FILE_FLAG_WRITE_THROUGH, NULL);

if (h == INVALID_HANDLE_VALUE) return 0;

DWORD bytesW;
while(true) {
Sleep(100);
WriteFile(h, d, strlen(d), &bytesW, NULL);
}

CloseHandle(h);
return 0;

最佳答案

Windows 和 Linux 都有默认的文件打开方式,fopen 默认使用这种方式。

在 Windows 中,这意味着阻塞(一次只有一个进程可以打开一个文件)。

在 Linux 中,它意味着非阻塞。

fopen 是一个高级 API。要自己选择文件的阻止策略,对于 Windows,您应该使用 OpenFile来自 WinAPI。特别是,请查看 OF_SHARE_* 标志。

关于c++ - (Windows) 同时打开同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com