78 votes

Créer un répertoire s'il n'existe pas

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.

48voto

Vertexwahn Points 2095
#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
}

41voto

Chris Rayner Points 427

Le moyen le plus simple et le plus efficace est probablement d'utiliser les fonctions boost et boost::filesystem. De cette façon, vous pouvez créer un répertoire simplement 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;
}

boost::filesystem::create_directory - documentation

20voto

Fivee Arch Points 264

Voici la façon 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.

9voto

Jiashuo Li Points 1046

_mkdir fera également le travail.

 _mkdir("D:\\test");

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X