c++ - CreateFile 返回无效句柄值

标签 c++ winapi

我正在尝试从 exe 文件所在的目录中读取文件。 data.txt 文件位于 VS Project 目录中,当我指定完整路径时,一切正常。

char curDirectory[MAX_PATH];
GetCurrentDirectory(MAX_PATH, curDirectory);

char filePath[MAX_PATH];

char *name = "\\data.txt";

memcpy(filePath, curDirectory, sizeof(curDirectory));
memcpy(filePath + strlen(curDirectory), name, strlen(name));

HANDLE hFile = CreateFile(filePath, GENERIC_ALL, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

最佳答案

您不会以 null 终止字符串。为此,请在第二次调用 memcpy 时传递 strlen(name) + 1

一些其他观察:

  • CreateFile 失败时,您应该调用GetLastError 获取错误代码。
  • 在处理字符串时使用strcpystrcat 而不是memcpy
  • 就是说,您的代码要求溢出缓冲区。如果这确实是 C++,请使用 std::string 并让该类管理缓冲区。
  • 没有真正的理由相信可执行文件位于当前工作目录中。

关于c++ - CreateFile 返回无效句柄值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167509/

相关文章:

c++ - 设置 WH_KEYBOARD Hook 失败并出现错误 1428

windows - 在 Windows 上检测 DisplayPort(相对于 DVI?)?

c++ - 在 T 的命名空间内调用函数

c++ - 什么时候用逗号来分隔 C++ 中的两个或多个条件比较合适?

c++ - 在全局变量的 header 和源中使用 "extern int x"中的 extern 关键字是否正确?

c++ - 写入时 WaitForMultipleObjects 访问冲突

c# - CBTProc 回调不起作用,setEventHookEx

c++ - 是否可以在 C++ 中使用运算符重载来更改(未修改的)包含函数的含义?

c++ - OpenGL/GLSL - 使用缓冲区对象来获取统一的数组值

c++ - 键盘输入程序中的退格功能