it-swarm.com.de

Erstellen Sie ein Verzeichnis, wenn es nicht existiert

In meiner App möchte ich eine Datei auf die andere Festplatte kopieren. Dies ist also mein 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;
}

nachdem ich dies ausgeführt habe, zeigt es mich in der D:HDD eine Datei testEmploi NAm.docx aber ich möchte, dass er den Testordner erstellt, wenn er nicht existiert.

Ich möchte das tun, ohne die Boost-Bibliothek zu verwenden.

53
pourjour

Verwenden Sie die Funktion WINAPI CreateDirectory() , um einen Ordner zu erstellen.

Sie können diese Funktion verwenden, ohne zu prüfen, ob das Verzeichnis bereits vorhanden ist, da es fehlschlägt, aber GetLastError()ERROR_ALREADY_EXISTS Zurückgibt:

if (CreateDirectory(OutputFolder.c_str(), NULL) ||
    ERROR_ALREADY_EXISTS == GetLastError())
{
    // CopyFile(...)
}
else
{
     // Failed to create directory.
}

Der Code zum Erstellen der Zieldatei ist falsch:

string(OutputFolder+CopiedFile).c_str()

dies würde zu "D:\testEmploi Nam.docx" führen: Es fehlt ein Pfadtrennzeichen zwischen dem Verzeichnis und dem Dateinamen. Beispiel Fix:

string(OutputFolder+"\\"+CopiedFile).c_str()
66
hmjd

Der wahrscheinlich einfachste und effizienteste Weg ist die Verwendung von boost und den Funktionen des boost :: -Dateisystems. Auf diese Weise können Sie einfach ein Verzeichnis erstellen und sicherstellen, dass es plattformunabhängig ist.

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

32
Chris Rayner
#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
}
20
Vertexwahn

Hier ist die einfache Möglichkeit, einen Ordner zu erstellen .......

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

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


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

Dieser obige Code funktioniert gut für mich.

18
Fivee Arch

_mkdir erledigt auch die Arbeit.

_mkdir("D:\\test");

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

7
Eliko

Verwenden Sie CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);

Wenn die Funktion erfolgreich ist, wird ein Wert ungleich Null zurückgegeben, andernfalls NULL.

2
DotNetUser

OpenCV-spezifisch

Opencv unterstützt das Dateisystem, wahrscheinlich durch seine Abhängigkeit Boost.

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

Sie können cstdlib verwenden

Obwohl http://www.cplusplus.com/articles/j3wTURfi/

#include <cstdlib>

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

sie können auch überprüfen, ob das Verzeichnis bereits vorhanden ist, indem Sie verwenden

#include <dirent.h>
1
Noa Yehezkel