Подтвердить что ты не робот

Создайте каталог, если он не существует

В моем приложении я хочу скопировать файл на другой жесткий диск, так что это мой код:

 #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: файл testEmploi NAm.docx но я хочу, чтобы он создал тестовую папку, если она не существует.

Я хочу сделать это без использования библиотеки Boost.

4b9b3361

Ответ 1

Используйте 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()

Ответ 2

Вероятно, самый простой и эффективный способ - использовать функции 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 - документация

Ответ 3

#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
}

Ответ 4

Вот простой способ создать папку.......

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

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


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

Этот код хорошо работает для меня.

Ответ 7

Специфичный для OpenCV

Opencv поддерживает файловую систему, вероятно, через свою зависимость Boost.

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

Ответ 8

Вы можете использовать cstdlib

Хотя- http://www.cplusplus.com/articles/j3wTURfi/

#include <cstdlib>

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

вы также можете проверить, существует ли каталог уже с помощью

#include <dirent.h>