我正在尝试从 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
获取错误代码。 - 在处理字符串时使用
strcpy
和strcat
而不是memcpy
。 - 就是说,您的代码要求溢出缓冲区。如果这确实是 C++,请使用
std::string
并让该类管理缓冲区。 - 没有真正的理由相信可执行文件位于当前工作目录中。
关于c++ - CreateFile 返回无效句柄值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167509/