tiedoston siirto

Miten onnistuisi tehä tiedoston kopiominen tai siirtäminen c:llä paikasta a paikkaan b?
10705
Äänestä

Muut lukivat myös

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");

Äänestä
  • jos haluat C.llä tehdä saman niin käytä fopen(), fread(), fwrite() ja fclose() funktioita istream:n sijaan.

    Äänestä



  • 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..?

    Äänestä

  • on jo olemassa? kirjoitti:

    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;
    }

    Äänestä

  • Johnnie83 kirjoitti:

    jos haluat C.llä tehdä saman niin käytä fopen(), fread(), fwrite() ja fclose() funktioita istream:n sijaan.

    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");

    Äänestä

  • käytännössä kirjoitti:

    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);

    Äänestä

  • Johnnie83 kirjoitti:

    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?

    Äänestä

int main (int argc, char*argv[])
{
char rivi[500];
sprintf(rivi, "move %s %s", argv[1], argv[2]);
system (rivi);
}

Äänestä

Kommentoi aloitusta


kepil20 kirjoitti:

Miten onnistuisi tehä tiedoston kopiominen tai siirtäminen c:llä paikasta a paikkaan b?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu