Dans mon application, je veux copier un fichier sur l'autre disque dur, voici donc mon code:
#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;
}
donc après avoir exécuté ceci, il me montre dans le D:
HDD un fichier testEmploi NAm.docx
mais je veux qu’il crée le dossier de test s’il n’existe pas.
Je veux le faire sans utiliser la bibliothèque Boost.
Utilisez la fonction WINAPI CreateDirectory()
pour créer un dossier.
Vous pouvez utiliser cette fonction sans vérifier si le répertoire existe déjà car il échouera mais GetLastError()
renverra ERROR_ALREADY_EXISTS
:
if (CreateDirectory(OutputFolder.c_str(), NULL) ||
ERROR_ALREADY_EXISTS == GetLastError())
{
// CopyFile(...)
}
else
{
// Failed to create directory.
}
Le code de construction du fichier cible est incorrect:
string(OutputFolder+CopiedFile).c_str()
cela produirait "D:\testEmploi Nam.docx"
: il manque un séparateur de chemin entre le répertoire et le nom du fichier. Exemple de correction:
string(OutputFolder+"\\"+CopiedFile).c_str()
Le moyen le plus simple et le plus efficace consiste probablement à utiliser les fonctions boost et boost :: filesystem. De cette façon, vous pouvez simplement créer un répertoire et vous assurer qu'il est indépendant de la plate-forme.
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
}
Voici le moyen simple de créer un dossier .......
#include <windows.h>
#include <stdio.h>
void CreateFolder(const char * path)
{
if(!CreateDirectory(path ,NULL))
{
return;
}
}
CreateFolder("C:\\folder_name\\")
Ce code ci-dessus fonctionne bien pour moi.
_mkdir
fera également le travail.
_mkdir("D:\\test");
Utilisez CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);
Si la fonction réussit, elle renvoie non nul, sinon NULL
.
spécifique à OpenCV
Opencv supporte le système de fichiers, probablement à travers sa dépendance Boost.
#include <opencv2/core/utils/filesystem.hpp>
cv::utils::fs::createDirectory(outputDir);
Vous pouvez utiliser cstdlib
Bien que http://www.cplusplus.com/articles/j3wTURfi/
#include <cstdlib>
const int dir= system("mkdir -p foo");
if (dir< 0)
{
return;
}
vous pouvez également vérifier si le répertoire existe déjà en utilisant
#include <dirent.h>