【发布时间】:2013-03-01 09:17:28
【问题描述】:
我正在尝试从缓冲区文件中读取二进制数据,该文件由不同的进程(我无法修改)连续写入。我正在使用以下代码打开文件:
fileH = CreateFileA((LPCSTR)filename,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
它可以正确打开,没有错误。但是,当我从文件中读取数据时,由于我丢失了数据,它似乎阻止了其他进程写入文件。
缓冲区是循环的,这意味着文件大小是固定的,新数据会不断地覆盖缓冲区中的旧数据。
编辑: 有时最简单的解决方案会奏效......
我已联系软件公司并告诉他们该错误,并在一天之内发布了带有修复程序的新版本。 抱歉,这不适用于所有人。
【问题讨论】:
-
同时读写文件是个坏主意。尝试使用
Mutex或Events来处理访问。 -
@bash.d,真的吗?告诉
tail和类似的实用程序。此外,您不能使用互斥锁和事件来同步进程。此外他说他不能修改其他应用程序。 -
真正的问题是为什么您在 2013 年仍在使用非 Unicode API。您的意思是不是
CreateFileW? -
你知道其他进程是否保持文件打开,或者它是否在每次需要写入时尝试打开文件?如果它试图以独占模式打开文件,当您打开文件以供读取时它将失败。与其他人所说的相反,通常让多个进程读取/写入同一个文件是完全可以的。
-
过于本地化?认真的吗?
标签: c++ windows file winapi createfile