【问题标题】:Createfile function创建文件功能
【发布时间】:2011-03-18 07:01:08
【问题描述】:

我正在使用 Createfile 函数创建文件。 C 程序工作正常,但我无法在相应文件夹中看到创建的文件。 还选中了“查看隐藏文件”选项。

【问题讨论】:

  • 在 MineSweeper 中很难达到那种效果。
  • 向我们展示代码!除了 Raymond Chen,心灵调试不是一个发达的领域。

标签: c windows winapi file


【解决方案1】:

您可以通过检查返回的 HANDLE 值来检查函数是否正常工作。

edit:如果函数失败,C 程序将继续运行(虽然不正确)。因此,检查每个返回的 HANDLE 非常重要。

edit:返回的 HANDLE 不应为 INVALID_HANDLE_VALUE。 (但我可以想象 NULL 也不好)。

【讨论】:

  • CreateFile 不返回 HRESULT
  • 是的,只有功能正常工作。我检查了返回的值(0)。
  • 功能如下:memset(message_file, 0x00, sizeof(cmdline)); sprintf(message_file,"D:\\temp2\\a.txt"); fd = CreateFile(message_file, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (fd == INVALID_HANDLE_VALUE) { 返回 1;执行上述操作后,我检查了文件夹 D:\temp2,同一文件夹中不存在文件。
  • 什么是message_file?请在您的问题中发布代码。您可以对其进行编辑 - 代码格式选项功能更强大
【解决方案2】:

需要检查两件事。第一,它真的成功了吗?来自docs

返回值
如果函数成功,则返回值是指定文件、设备、命名管道或邮件槽的打开句柄。
如果函数失败,返回值为INVALID_HANDLE_VALUE。要获取更多错误信息,请致电GetLastError

第二,你找对地方了吗?通常,从 IDE 中运行代码的人并没有意识到他们当前的工作目录并不总是他们认为的那样。你可以system("cd"); 或类似的东西来看看它到底是什么。

或者,您可以使用绝对路径名来确保在正确的位置创建文件(为了测试,也就是说 - 您应该从不对生产代码使用绝对路径)。

如果这两个建议都没有帮助,您应该发布显示特定问题的代码。最好足够了,这样我们就不必再回来要求更多了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多