创建一个不存在的目录

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

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

236573 次浏览

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

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

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

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

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


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




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

上面的代码对我来说工作得很好。

可能最简单和最有效的方法是使用 ost 和 ost: : 文件系统函数。通过这种方式,您可以简单地构建一个目录,并确保它是独立于平台的。

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

Create _ direct- 文档

_mkdir也将完成这项工作。

_mkdir("D:\\test");

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

#include <experimental/filesystem> // or #include <filesystem> for C++17 and up
    

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
}

你可以使用 Cstdlib

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

#include <cstdlib>


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

还可以使用

#include <dirent.h>

OpenCV 专用

Opencv 支持文件系统,可能是通过它的依赖性 Boost。

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

这在海湾合作委员会是可行的:

摘自: 在 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);
}

由于 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.
}
}


注意,如果您需要了解目录是否是新创建的,那么这个版本非常有用。 我发现关于 cpferences 的文档在这一点上有点难以理解: 如果目录已经存在,那么这个函数将返回 false。

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