【问题标题】:CreateDirectory doesn't create a directory VS2017 c++CreateDirectory 不创建目录VS2017 c++
【发布时间】:2019-06-23 14:48:39
【问题描述】:

我正在尝试在我的应用程序中创建一个目录(如果不存在)并且我正在使用 CreateDirectory 函数,问题是它没有创建文件夹:

string folderfile = "C:\\Screenshots";

CreateDirectory(LPCTSTR(folderfile.c_str()), NULL);

我正在管理员模式下执行 Visual Studio。

可能是什么问题?

【问题讨论】:

  • 调用 GetLastError()
  • 可能是 LPCTSTR 的演员表。字符串不一定是 TCHAR 序列,它取决于编译器设置。
  • 大概您添加了演员表以消除编译器错误?这是一个很好的教训,你可以强制编译器接受你的代码使用强制转换,但错误是有原因的。您需要解决真正的问题,而不仅仅是添加演员表。
  • 那我怎样才能正确传递参数呢?它甚至不允许我通过文字 "C:\\Screenshots"...

标签: c++ visual-studio directory


【解决方案1】:

根据LPCTSTR 的演员表,我的水晶球告诉我对CreateDirectory(folderfile.c_str(), NULL); 的调用没有为您编译。这是因为 Visual Studio 默认以 Unicode 模式编译,您需要使用 wstring

您有几个解决方案:

  1. 将项目字符集切换到ANSI模式
    项目属性 -> 常规 -> 字符集 em> -> 使用多字节字符集
  2. 明确调用CreateDirectoryA

    string folderfile = "C:\\Screenshots";
    CreateDirectoryA(folderfile.c_str(), NULL);

  3. 继续使用 Unicode 字符集并使用wstring

    wstring folderfile = L"C:\\Screenshots";
    CreateDirectory(folderfile.c_str(), NULL);

别忘了检查返回值 (BOOL),如果是 false,则调用 GetLastError()。这样您就可以了解为什么调用失败了。

【讨论】:

  • 谢谢,你的水晶球效果很好,解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多