在我的应用中,我想将文件复制到另一个硬盘,所以这是我的代码:
#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库的情况下这样做。
答案 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;
}
答案 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)
答案 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);
}