如果目录不存在,请创建一个目录

时间:2012-02-10 22:25:33

标签: c++ windows file directory copy

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

 #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库的情况下这样做。

9 个答案:

答案 0 :(得分:64)

使用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()

答案 1 :(得分:30)

可能最简单,最有效的方法是使用boost和boost :: filesystem函数。这样,您可以简单地构建目录并确保它与平台无关。

const char* path = _filePath.c_str();
boost::filesystem::path dir(path);
if(boost::filesystem::create_directory(dir))
{
    std::cerr<< "Directory Created: "<<_filePath<<std::endl;
}

boost::filesystem::create_directory - documentation

答案 2 :(得分:19)

#include <experimental/filesystem> // or #include <filesystem>

namespace fs = std::experimental::filesystem;


if (!fs::is_directory("src") || !fs::exists("src")) { // Check if src folder exists
    fs::create_directory("src"); // create src folder
}

答案 3 :(得分:18)

以下是创建文件夹的简单方法.......

#include <windows.h>
#include <stdio.h>

void CreateFolder(const char * path)
{   
    if(!CreateDirectory(path ,NULL))
    {
        return;
    }
}


CreateFolder("C:\\folder_name\\")

以上代码适用于我。

答案 4 :(得分:7)

_mkdir也可以胜任。

_mkdir("D:\\test");

https://msdn.microsoft.com/en-us/library/2fkk4dzw.aspx

答案 5 :(得分:2)

使用CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);

如果函数成功,则返回非零,否则为NULL

答案 6 :(得分:1)

您可以使用 cstdlib

虽然 - http://www.cplusplus.com/articles/j3wTURfi/

#include <cstdlib>

const int dir= system("mkdir -p foo");
if (dir< 0)
{
     return;
}

您还可以使用

检查目录是否已存在
#include <dirent.h>

答案 7 :(得分:1)

OpenCV特定

Opencv支持文件系统,希望通过其依赖项Boost。

#include <opencv2/core/utils/filesystem.hpp>
cv::utils::fs::createDirectory(outputDir);

答案 8 :(得分:0)

这在 GCC 中有效:

取自: Creating a new directory in C

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

struct stat st = {0};

if (stat("/some/directory", &st) == -1) {
    mkdir("/some/directory", 0700);
}