CreateFile返回无效的句柄值

时间:2017-04-02 10:59:47

标签: 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);

1 个答案:

答案 0 :(得分:1)

你不会终止字符串。通过在List<string> fileLines = new List<string>(); using (var reader = new StreamReader(fileName)) { string line; while ((line = reader.ReadLine()) != null) { if (line == "") continue; // refuse bare lines... string a = line.Split(',')[0]; string b = line.Split(',')[1]; DateTime dt = DateTime.ParseExact(line.Split(',')[2], "dd.MM.yyyy", null); fileLines.Add(line); // if you want.... } } 的第二次调用中传递strlen(name) + 1来执行此操作。

其他一些观察结果:

  • memcpy失败时,您应该致电CreateFile以获取错误代码。
  • 使用字符串时,请使用GetLastErrorstrcpy而不是strcat
  • 那就是说,你的代码要求超出缓冲区。如果这确实是C ++,请使用memcpy并让该类管理缓冲区。
  • 没有理由相信可执行文件位于当前工作目录中。