C++ 以只读模式打开/写入另一个应用程序已打开的文件

C++ 以只读模式打开/写入另一个应用程序已打开的文件,c++,C++,我使用Visual Studio 2012用C++编写,AM遇到以下问题: 我有一个第三方应用程序,它经常在后台运行,并在事件发生时输出到文本文件。我想使用另一个应用程序(我现在正在使用的应用程序)为文件添加时间戳(比如每5秒一次),这样我就可以知道事件发生的大致时间。该事件随机且不经常发生 我正在使用CreateFile和WriteFile函数,但WriteFile将给我一个错误,因为它没有写入权限。我想知道是否有一种方法可以忽略此写入权限,而直接写入文件。我知道这样做不安全,但有可能吗?我不

我使用Visual Studio 2012用C++编写,AM遇到以下问题:

我有一个第三方应用程序,它经常在后台运行,并在事件发生时输出到文本文件。我想使用另一个应用程序(我现在正在使用的应用程序)为文件添加时间戳(比如每5秒一次),这样我就可以知道事件发生的大致时间。该事件随机且不经常发生


我正在使用CreateFile和WriteFile函数,但WriteFile将给我一个错误,因为它没有写入权限。我想知道是否有一种方法可以忽略此写入权限,而直接写入文件。我知道这样做不安全,但有可能吗?

我不知道有什么方法可以写入未打开的文件。但你可以将第三方应用程序写入的数据复制到另一个文件中,并在其中添加时间戳


只需让应用程序每隔几秒钟轮询一次原始文件的大小。如果更改了,请将当前时间和日期写入新文件,并将附加到原始文件的部分复制到新文件。

您需要研究(独占)文件打开/创建时的共享模式您可以尝试在administrator中运行*.exe,或者至少在
CreateFile
中写入文件夹的写入权限应为
file\u SHARE\u READ | file\u SHARE\u write | file\u SHARE\u DELETE
,只要您同意另一个进程即可打开文件时读取/写入/删除或重命名文件。我通常喜欢将这3位视为“默认”-除非我有很好的理由(通常当我认为我有很好的理由时,我就错了),否则我不会打开没有这3位的文件。谢谢asveikau!(我之前只是在使用文件共享写入)。现在,当两个应用程序同时写入时,我不得不担心数据损坏。我想知道C++中是否有一种方法来检测另一个文件的写入时间?我看到Windows命名管道必须有特殊的名称,你能配置日志记录器使用的文件名吗?浏览文档给我的印象是,你可以为多个客户提供服务,并保持渠道的独立性。事实上,这就是我现在所做的。但是我希望第三方应用程序能够运行很长一段时间,这样日志文件就会越来越大。而且,一旦文件变大,后期处理可能会很困难。@user2675918:我看到的唯一问题是,只要第三方应用程序没有停止,原始文件就会继续增长。我认为没有简单的方法可以防止这种情况。但其他一切都可以在应用程序中处理。您可以随时切换到新文件——毕竟您可以控制二级文件的写入。您甚至可以在插入时间戳之前查找例如换行符,动态处理数据--无论您想要什么。