【问题标题】:Write permission to a file getting lost after file recreation in c++在c ++中重新创建文件后丢失文件的写权限
【发布时间】:2019-04-27 18:14:47
【问题描述】:

我有一个 MFC 应用程序,它有 2 个 exes。它们共享一个用于读取和写入的公共资源文件。一旦文本文件超过其大小限制,它就会重新创建。之后,只有一个 exe 能够写入文件。即游戏后写权限丢失。

以下是用于创建新文件的代码。

CreateFile(FileName, GENERIC_ALL, FILE_ALL_ACCESS, NULL,
           OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

您能提出任何解决方案吗?提前致谢。

【问题讨论】:

  • 好的。我会这样做的。
  • FILE_ALL_ACCESS 放错地方了。你应该更详细地解释你的目标是什么。您可以尝试(只是一个建议)CreateFile(filename, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) 这将创建只写文件,其他程序无法访问它。然后关闭手柄,使用GENERIC_READ 访问权限打开它。这是一种简单的方法,出错的可能性较小。你也可以在 MFC 中使用CFile

标签: c++ file winapi


【解决方案1】:

这将错误的参数传递给CreateFile,对于dwDesiredAccessdwShareMode。前者要求的访问权限比需要的多。但是,后者是致命的,因为它请求的共享模式与访问模式冲突(它使用了一个不打算在这里使用的符号常量)。

要打开文件以进行读/写访问,同时授予其他调用者以相同权限访问该文件,请改用以下代码:

CreateFile(FileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
           OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

Creating and Opening Files 上的 MSDN 条目列出了兼容的访问和共享模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 2020-09-16
    • 2012-05-31
    • 2023-03-19
    • 2021-10-20
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多