私のアプリでは、ファイルを他のハードディスクにコピーしたいので、これが私のコードです:
#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ライブラリを使用せずにそれを行いたい。
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()
おそらく最も簡単で効率的な方法は、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;
}
#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
}
以下にフォルダを作成する簡単な方法を示します。
#include <windows.h>
#include <stdio.h>
void CreateFolder(const char * path)
{
if(!CreateDirectory(path ,NULL))
{
return;
}
}
CreateFolder("C:\\folder_name\\")
上記のコードは私にとってはうまく機能します。
CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);
を使用します
関数が成功した場合、ゼロ以外を返します。それ以外の場合は、NULL
。
OpenCV固有
Opencvは、おそらくその依存関係Boostによってファイルシステムをサポートします。
#include <opencv2/core/utils/filesystem.hpp>
cv::utils::fs::createDirectory(outputDir);
使用できますcstdlib
けれども http://www.cplusplus.com/articles/j3wTURfi/
#include <cstdlib>
const int dir= system("mkdir -p foo");
if (dir< 0)
{
return;
}
を使用して、ディレクトリが既に存在するかどうかを確認することもできます
#include <dirent.h>