Создайте каталог, если он не существует
В моем приложении я хочу скопировать файл на другой жесткий диск, так что это мой код:
#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.
Ответы
Ответ 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\\")
Этот код хорошо работает для меня.
Ответ 5
_mkdir
также выполнит задание.
_mkdir("D:\\test");
https://msdn.microsoft.com/en-us/library/2fkk4dzw.aspx
Ответ 6
Используйте CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);
Если функция завершается успешно, она возвращает ненулевое значение в противном случае NULL
.
Ответ 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>