PDA

View Full Version : [C++] Linux Copia File


tomminno
26-02-2008, 16:47
Esiste un supporto da parte del sistema alla copia dei file tipo il CopyFile di Windows?
Non ho trovato niente.

Avendo la necessità di spostare/copiare file di qualche centinaio di MB mi chiedevo se ci fosse qualche metodo più indicato rispetto alla copia degli stream buffer fatta così:

std::ifstream ifs("input.txt", std::ios::binary);
std::ofstream ofs("output.txt", std::ios::binary);

ofs << ifs.rdbuf();

kernel::panic
27-02-2008, 21:13
Puoi provare se questo metodo è più veloce


#include <fstream>
#define BUFFER_SIZE 256

int main(int argc, char **argv)
{
std::ifstream in(argv[1], std::ios_base::binary);
std::ofstream out(argv[2], std::ios_base::binary);

char buffer[BUFFER_SIZE];

while(!in.eof())
{
in.read(buffer, BUFFER_SIZE);
out.write(buffer, in.gcount());
}

return 0;
}


Ciao

tomminno
28-02-2008, 08:40
Grazie, ma no non è più veloce.

Volevo sapere se esiste qualche api del sistema operativo per la copia dei file.
Ma sembrerebbe proprio di no.

cionci
28-02-2008, 09:23
ostringstream oss;
oss << "cp " << argv[1] << " " << argv[2];

system(oss.str());

:stordita:

tomminno
28-02-2008, 09:51
:D
Speravo in qualcosa controllabile da codice.

ilsensine
28-02-2008, 10:53
Volevo sapere se esiste qualche api del sistema operativo per la copia dei file.

No perché non è necessaria, non aggiunge alcuna funzionalità utile in più.

Avrebbero potuto fare una API nelle libc, ma non sarebbe stata molto diversa delle due righe che puoi scrivere a mano.

La velocità del codice influisce poco, la copia di un file - specie se grosso - è un processo sostanzialmente i/o bound.

tomminno
28-02-2008, 11:15
No perché non è necessaria, non aggiunge alcuna funzionalità utile in più.

Avrebbero potuto fare una API nelle libc, ma non sarebbe stata molto diversa delle due righe che puoi scrivere a mano.

La velocità del codice influisce poco, la copia di un file - specie se grosso - è un processo sostanzialmente i/o bound.

Infatti non mi interessa la velocità del codice, mi interessa che sia ottimizzato il processo sottostante di copia e possibilmente avere un controllo diretto da codice, cosa che con una chiamata system non ho.

In caso di file particolarmente grossi ci sono alternative a cp?