[c++] Kopiowanie katalogu do innego katalogu


(rycerz2000) #1

Potrzeba mi kodu który kopiował by jeden katalog do drugiego katalogu. Czytałem i kombinowałem z CopyDirectory ale nic

z tego nie wyszło.  :frowning: Mógłby ktoś pomóc i podać przykład do CopyDirectory albo jakiś inny kod kopiujący katalog?


(Grzelix) #2

Podaj kod, parametry wejściowe i wynik jaki otrzymujesz. CopyDirectory jest jak najbardziej odpowiednią metodą. Podaj jeszcze na jakim środwisku to programujesz (linux, windows).


(stasinek) #3

w windows polecam SHFileOperation :wink:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx


(rycerz2000) #4

Ma to niby działać tak(część mojego programu): Jeśli użytkownik wybierze z menu tą opcje to przenosi go do funkcji która tworzy dodatkowy folder a następnie kopiuje folder z plikami (w tym folderze użytkownik przechowuje różne pliki, co chce) do nowo utworzonego folderu. Programuje na windowsie.


(Grzelix) #5

To może jeszcze raz:

  1.  Podaj kod, to co już masz za programowane.

  2. Podaj przykładowe wejście np

 

struktura folderów C:\folder_a\folder_b\folder_c

w “folder_c” są pliki a.txt, b.txt

wejście ścieżka “C:\folder_a\folder_b” - jako folder do skopiowania oraz ścieżka “C:” jako miejsce do celowe

wyjście C:\folder_b\folder_c z plikami a.txt i b,txt w środku.

 

Lub inne zamierzone przez ciebie zadanie. Sorry ale zadałeś pytanie w dziale programowanie i tutaj piszemy (bądź staramy się pisać) konkrety, To co opisałeś powyżej to ładny opisowy przypadek użycia ale nie napiszemy ci kompletnego rozwiązanie ale możemy pomóc znaleźć błąd w tym co masz. A jak wiadomo człowiek najlepiej uczy się na błędach.


(rycerz2000) #6
  1. Po wybraniu opcji z menu

    void kopiuj()
    {
    CreateDirectory(TEXT(“pliki/kopia”), NULL);
    ifstream plik1 (“pliki/sciezka”);
    string sciezka;
    plik1 >> sciezka; // odczytywanie ścieżki do folderu który ma zostać skopiowany. Użytkownik podaje ją przy pier wszym uruchomieniu programu
    //Tutaj CopyDirectry
    cout << “Folder zostal skopiowany!” << endl << endl;
    }

menu jest w pętli do while więc po zakończeniu funkcji z powrotem wyświetli się menu

  1. ścieżka do folderu który ma być skopiowany jest odczytywana z pliku “pliki/sciezka”

   a ścieżka do folderu do którego ma być skopiowany to “pliki/kopia”


(Ryan) #7

Nie ma dobrej odpowiedzi na Twoje pytanie. W katalogach mogą znajdować się linki symboliczne (nie, nie pliki .lnk), hard linki, junction points, do katalogu mogą być zmapowane udziały sieciowe. Jakiego zachowania oczekujesz wobec takich (i masy innych) przypadków? Jeśli interesuje Cię proste kopiowanie z pominięciem problematycznych scenariuszy (hard linki mogą tworzyć nieskończoną rekurencję), to sugeruję FindFirstFile/FindNextFile z odpowiednimi atrybutami + CreateFile/CopyFile. Link do dokumentacji Find* znajduje się w Twoim sąsiednim wątku.