Miten onnistuisi tehä tiedoston kopiominen tai siirtäminen c:llä paikasta a paikkaan b?
tiedoston siirto
kepil20
10705
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 10
Vanhimmat
Avaa paikan a tiedosto.
ifstream in ("tiedosto", ios::binary);
Luo uusi tiedosto paikkaan b.
ofstream out ("tiedosto2");
Kirjoita siihen paikan a tiedoston data.
char buffer[10];
while(!in.eof)
{
in.read(&buffer,10);
out.write(&buffer,10);
}
in.close();
out.close();
Poista a paikalla oleva tiedosto. (Jätä tämä tekemättä jos haluat kopioida)
remove("tiedosto");
jos haluat C.llä tehdä saman niin käytä fopen(), fread(), fwrite() ja fclose() funktioita istream:n sijaan.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/copyfile.asp
*nixissa?
Mitä sitten tapahtuu jos luodaan uusi tiedoston ja se on jo olemassa? Kirjoittaako se datan vanhan tiedoston perään vai uusii kokonaan sen?
Tämä varmaan sais tarkistettua jollakin silmukalla onko tiedosto jo olemassa..?
Jos tiedosto johon kirjoitat on jo olemassa niin se menetetään antamani esimerkissä.
Sen takia kannattaakin ensin tarkistaa onko tiedosto jo olemassa ennen kun alkaa tehdä yhtään mitään.
Sen voi tehdä monella tavalla, yksi tapa on yrittää avata kohde-tiedosto ja jos se aukeaa ilman vikailmoituksia niin se on jo olemassa.
Tässä esimerkki:
bool tarkasta_tiedosto(char *polku)
{
bool olemassa = false;
ifstream in (polku);
if(in.is_open) olemassa = true;
in.close();
return olemassa;
}
Kuinka tämä käytännössä tapahtuu C:llä? Ei ainakaan näin onnistu :(
char buffer[10];
fopen("tiedosto1", "a");
fread("polku/tiedosto2", "w");
while(!fwrite)
{
fread(&buffer,10);
fwrite(&buffer,10);
}
fclose("fopen");
fclose("fread");
remove("tiedosto1");
Olet kyllä oikealla jäljellä. Tässä esimerkki C:llä joka ei poista jo olemassa olevaa kohdetiedostoa.
char buffer[10];
FILE *in, *out;
/*Tarkista jos luettava tiedosto on olemassa*/
in = fopen ("tiedostoA", "br");
if(in == NULL) return 1;
/*Tarkista jos kohde tiedosto on jo olemassa*/
out = fopen ("tiedostoB", "br");
if(out == NULL) out = fopen ("tiedostoB", "bw");
else return 1;
while(!feof(in))
{
fread (buffer,1,10,in);
fwrite (buffer,1,10,out);
}
fclose(in);
fclose(out);
En saa toimimaan jos käytän argumenttina binääritiedostoon tarkoitettuja "br" ja "bw" niin ei tee mitään.
Mutta kun vaihdan noi "r" "w" niin kopio kuvan mutta tuloksena myös jotain ihme sekasotkua ja keskeytetty?
int main (int argc, char*argv[])
{
char rivi[500];
sprintf(rivi, "move %s %s", argv[1], argv[2]);
system (rivi);
}