Práce se soubory v C/C++ (kopírování, přesouvání, mazání...) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Práce se soubory v C/C++ (kopírování, přesouvání, mazání...) – C / C++ – Fórum – Programujte.comPráce se soubory v C/C++ (kopírování, přesouvání, mazání...) – C / C++ – Fórum – Programujte.com

 

Exaris0
Duch
3. 9. 2013   #1
-
0
-

Zdravím,
lze použít C/C++ k vytvoření aplikace pro zálohování dat?
Jde mi v podstatě o prosté kopírování určených souborů odněkud někam.
Vím, že by tohle šlo napsat třeba VBS skriptem, ale mám už jednu aplikaci v C++, která běží na daném stroji a rád bych tuto funkci implementoval přímo zde v C++.

Děkuji za odpověď,

S pozdravem TriFith

Nahlásit jako SPAM
IP: 180.150.157.–
Martin Kozibrátka0
Stálý člen
3. 9. 2013   #2
-
0
-

Ale jistě že.

#include <iostream>
#include <fstream>
#include <ctime>
#include <algorithm>
#include <iterator>
using namespace std;

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

    ifstream source("from.ogv", ios::binary);
    ofstream dest("to.ogv", ios::binary);

    istreambuf_iterator<char> begin_source(source);
    istreambuf_iterator<char> end_source;
    ostreambuf_iterator<char> begin_dest(dest); 
    copy(begin_source, end_source, begin_dest);

    source.close();
    dest.close();

    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;
}
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;

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

    ifstream source("from.ogv", ios::binary);
    ofstream dest("to.ogv", ios::binary);

    dest << source.rdbuf();

    source.close();
    dest.close();

    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;
}
#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;
}
Nahlásit jako SPAM
IP: 188.120.221.–
Savana.cz - neomezený webhosting za pár kaček :)
Exaris0
Duch
4. 9. 2013   #3
-
0
-

#2 Martin Kozibrátka
Děkuji za cenné informace, nicméně ještě jednu otázku...

Je možné jednu z nabízených alternativ použít na úrovni adresářů, nikoliv na úrovni jednotlivých souborů?

Díky

Nahlásit jako SPAM
IP: 180.150.157.–
yaqwsx+9
Posthunter
4. 9. 2013   #4
-
0
-

To už musíš využít OS specifických funkcí. Nevím, jak je na to na Linuxu/Unixu, či zda tuto problematiku nazastřešuje třeba knihovna boost, ale na Windows existuje sada funcí pro práci se soubory a adresáři: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364232%28v=vs.85%29.aspx Ostatně tyto funkce by měly být o něco efektivnější než příklad, který napsal Martin Kozibrátka - veškerá režie je totiž ponechána na OS.

Nahlásit jako SPAM
IP: 85.160.55.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

Podobná vlákna

Práce se soubory — založil jisla

Práce se soubory — založil Mike.Jt

Práce se soubory — založil Tomik

Práce se soubory — založil Polarski

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý