如果目录不存在则创建目录

新手上路,请多包涵

在我的应用程序中,我想将文件复制到另一个硬盘,所以这是我的代码:

  #include <windows.h>

using namespace std;

int main(int argc, char* argv[] )
{
    string Input = "C:\\Emploi NAm.docx";
    string CopiedFile = "Emploi NAm.docx";
    string OutputFolder = "D:\\test";
    CopyFile(Input.c_str(), string(OutputFolder+CopiedFile).c_str(), TRUE);

    return 0;
}

所以执行此操作后,它会在 D: HDD 文件中显示我 testEmploi NAm.docx 但我希望他创建测试文件夹,如果它不存在。

我想在不使用 Boost 库的情况下做到这一点。

原文由 pourjour 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

使用 WINAPI CreateDirectory() 函数创建文件夹。

您可以在不检查目录是否已存在的情况下使用此功能,因为它会失败,但 GetLastError() 将返回 ERROR_ALREADY_EXISTS

 if (CreateDirectory(OutputFolder.c_str(), NULL) ||
    ERROR_ALREADY_EXISTS == GetLastError())
{
    // CopyFile(...)
}
else
{
     // Failed to create directory.
}

构建目标文件的代码不正确:

 string(OutputFolder+CopiedFile).c_str()

这将产生 "D:\testEmploi Nam.docx" :目录和文件名之间缺少路径分隔符。示例修复:

 string(OutputFolder+"\\"+CopiedFile).c_str()

原文由 hmjd 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 c++17 开始,您可以通过以下方式轻松实现跨平台:

 #include <filesystem>
int main() {

  auto created_new_directory
      = std::filesystem::create_directory("directory_name");
  if (not created_new_directory) {
    // Either creation failed or the directory was already present.
  }
}

请注意,此版本非常有用,如果您需要知道该目录是否实际上是新创建的。而且我发现 cppreference 上的文档在这一点上有点难以理解:如果目录已经存在,则此函数返回 false。

这意味着,您可以或多或少地使用此方法自动创建一个新目录。

原文由 Eike 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题