2016-04-25 11 views
0

I existiert habe die folgende Verzeichnisstruktur:Fenster - Kopieren von Dateien nur, wenn übergeordnetes Verzeichnis nicht

Main1 
+-Parent1 
    +-File1 
    +-File2 
+-Parent2 
    +-File3 
    +-File4 
+-Parent3 
    +-File5 
    +-File6 
... 

Und ich bin auf der Suche nach einem neuen Verzeichnis zu kopieren. Wenn der Ordner "Übergeordnet" jedoch bereits vorhanden ist, möchte ich ihn ungeachtet des Dateiinhalts nicht kopieren.

Main2 
+-Parent2 
    +-File7 
    +-File8 

Also, wenn ich Main1-Main2 kopiere, die Parent2 Ordner in Main1 würde nicht kopieren, noch würde seinen Inhalt.

Am Ende sollte es so am Ende aussehen:

Main1 
+-Parent2 
    +-File3 
    +-File4 

Main2 
+-Parent1 
    +-File1 
    +-File2 
+-Parent2 
    +-File7 
    +-File8 
+-Parent3 
    +-File5 
    +-File6 
... 
+0

Mögliches Duplikat [Wie kann ich die Liste der Dateien in einem Verzeichnis mit C oder C++ erhalten?] (Http://stackoverflow.com/questions/612097/how-can-i-get-the- list-of-files-in-einem-verzeichnis-mit-c-or-c) –

Antwort

2

Dies ist der Code, den ich verwende, um die Liste der Ordner in einem beliebigen Ordner zu lesen. Sie können dies verwenden, um zu bekommen, was Sie angefordert haben.

// http://stackoverflow.com/questions/612097/how-can-i-get-the-list-of-files-in-a-directory-using-c-or-c herohuyongtao 
std::vector<std::string> get_all_folder_names_within_folder(std::string folder) 
{ 
    std::vector<std::string> names; 
    char search_path[200]; 
    sprintf_s(search_path, 200, "%s/*.*", folder.c_str()); 
    WIN32_FIND_DATA fd; 
    HANDLE hFind = ::FindFirstFile(search_path, &fd); 
    int i = 0; 
    if(hFind != INVALID_HANDLE_VALUE) { 
     do { 
      // read all (real) files in current folder 
      // , delete '!' read other 2 default folder . and .. 
      if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { 
       if (i >= 2){ 
        names.push_back(fd.cFileName); 
       } 
      } 
      i++; 
     }while(::FindNextFile(hFind, &fd)); 
     ::FindClose(hFind); 
    } 
    return names; 
} 
+0

Ahh, genial. Ich denke, das wird perfekt funktionieren, danke! Ich werde nur hinzufügen, um zu kopieren, wenn es nicht existiert. – rjbogz

+0

Ja, das ist der Kern davon ^^ Halte die Funktionen getrennt, damit jede Funktion das macht, was sie tun soll :) Könntest du die Antwort als gelöst markieren, wenn das ausreicht? –

+0

Ich wollte es einfach mal testen, scheint aber gut zu funktionieren. Danke noch einmal! – rjbogz

Verwandte Themen