(Windows)同时打开同一个文件

我试图打开一个文件,在Windows中同时书写和阅读。 我有一个程序写(每一秒)的文件和一个读取它。 在UNIX下它工作正常,但它不能在Windows中工作(我无法打开已经打开的文件)。 我用fopen()打开文件。

我怎么解决这个问题?

EDIT2:

检查出_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); 

阅读是在其他applicaiton,但它做了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; 

Solutions Collecting From Web of "(Windows)同时打开同一个文件"

Windows和Linux都有一个默认打开文件的方式,默认使用fopen

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

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

fopen是一个高级的API。 要选择文件上的阻止策略,对于Windows,您应该使用WinAPI中的OpenFile 。 尤其要看看OF_SHARE_*标志。