Kopiowanie zawartości folderu do innego folderu

0

Witam,
Prosta piłka.
Mam folder ccc w lokalizacji aaa/bbb/ccc
który zawiera pliki:
aaa.txt
bbb.txt
ccc.txt

Jak w C++ SKOPIOWAĆ zawartość folderu ccc bez tego folderu czyli pliki:
aaa.txt
bbb.txt
ccc.txt
do innego folderu załóżmy ddd o lokalizacji aaa/bbb/ddd który jest pustym folderem (ale to już bez znaczenia).

0

A nie można bez otwierania każdego pliku z osobna (bo nie każdy plik jest tekstowy, są tam jpeg'i pliki .sch exe'ki .pdf'y i różne różności), kopiowaniu znak po znaku do bufora i zapisywaniu do innego pliku tylko przez jakąś funkcję (które de facto i tak zrobi to samo)?

coś jak w linuxie cp aaa/* /home/user/aaa/

0

Do tego co @fasadin zalinkował dodałbym jeszcze "Windows way", czyli wyświetlenie windowsowego okienka z postępem kopiowania.
https://msdn.microsoft.com/en-us/library/bb762164.aspx

0

przeciez kopiowanie to robi. Otwiera plik, przepisuje bajty i zapisuje te bajty do innego. Tu nie ma zadnego znaczenia czy to .txt .pdf czy .dat

jak chcesz systemowe komendy to uzyj system("") z tym
http://ss64.com/nt/copy.html

0

Czyli rozumiem, że ten program będzie kopiował znak po znaku plik from.ogv do to.ogv dopóki fread nie zwróci zera. Tylko po co tam jakiś clock(); (żeby odmierzać czas)? tego akurat nie potrzebuję :P

Rozumiem też, że stała BUFSIZE domyślnie jest ustawiona na 8192 znaków, a co jeżeli plik będzie większy -> program będzie próbował zapisać znak poza tablicą.

#include <iostream>
#include <cstdio>    // fopen, fclose, fread, fwrite, BUFSIZ
#include <ctime>
using namespace std;

int main() {
    clock_t start, end;
    start = clock();

    // BUFSIZE default is 8192 bytes
    // BUFSIZE of 1 means one chareter at time
    // good values should fit to blocksize, like 1024 or 4096
    // higher values reduce number of system calls
    // size_t BUFFER_SIZE = 4096;

    char buf[BUFSIZ];
    size_t size;

    FILE* source = fopen("from.ogv", "rb");
    FILE* dest = fopen("to.ogv", "wb");

    // clean and more secure
    // feof(FILE* stream) returns non-zero if the end of file indicator for stream is set

    while (size = fread(buf, 1, BUFSIZ, source)) {
        fwrite(buf, 1, size, dest);
    }

    fclose(source);
    fclose(dest);

    end = clock();

    cout << "CLOCKS_PER_SEC " << CLOCKS_PER_SEC << "\n";
    cout << "CPU-TIME START " << start << "\n";
    cout << "CPU-TIME END " << end << "\n";
    cout << "CPU-TIME END - START " << end - start << "\n";
    cout << "TIME(SEC) " << static_cast<double>(end - start) / CLOCKS_PER_SEC << "\n";

    return 0;
}
0

Rozumiem też, że stała BUFSIZE domyślnie jest ustawiona na 8192 znaków, a co jeżeli plik będzie większy -> program będzie próbował zapisać znak poza tablicą.

Przecież podajesz rozmiar bufora do fread, odczytując w pętli za każdym razem BUFSIZE bajtów, z wyjątkiem ostatniego kawałka pliku, który może być mniejszy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1