Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kopiontikäsky

Sienessä [04.07.2006 16:38:16]

#

onko olemassa mitään sellasta käskyä, että voidaan kopioida esim. tekstitiedoston kansiosta toiseen.

Edit: C++

Metabolix [04.07.2006 17:04:24]

#

Se onnistuu esimerkiksi avaamalla molemmat tiedostot ja lukemalla toisesta ja kirjoittamalla toiseen niin kauan kuin tavaraa riittää. Tässäpä vielä tarkoitukseen virheenkäsittelyineen kaikkineen kelpo funktio, joka palauttaa totuusarvon riippuen kopioinnin onnistumisesta.

function Kopioi(Lahde, Kohde: String): Boolean;
const
    PalanKoko = 1048576;
var
    Alkufile, Loppufile: File;
    Kunnossa: Boolean;
    Luettu, Kirjoitettu: Integer;
    Puskuri: PByte;
begin
    Kunnossa := True;
    try
        Assign(Alkufile, Lahde);
        Reset(Alkufile, 1);
        Assign(Loppufile, Kohde);
        Rewrite(Loppufile, 1);
        GetMem(Puskuri, PalanKoko);
        while not Eof(Alkufile) do begin
            BlockRead(Alkufile, Puskuri^, PalanKoko, Luettu);
            BlockWrite(Loppufile, Puskuri^, Luettu, Kirjoitettu);
            if Kirjoitettu <> Luettu then begin
                Kunnossa := False;
                Break
            end
        end
    except
        Kunnossa := False
    end;

    try
        Close(Alkufile);
        Close(Loppufile);
        FreeMem(Puskuri)
    except
        Kunnossa := False
    end;

    Kopioi := Kunnossa
end;

Edit: Jaa, sen kielen olisi voinut heti kertoa. ^^ No mutta sovellapa tuosta.

Antti Laaksonen [04.07.2006 18:03:57]

#

Funktio rename sopii tehtävään (tiedoston nimi säilyy, mutta hakemisto muuttuu).

#include <stdio.h>

int main(void) {
    rename("c:\\vanha\\testi.txt", "c:\\uusi\\testi.txt");
    return 0;
}

Tämä esimerkki oli C:lle, mutta vastaava funktio on varmasti myös C++:ssa.

Metabolix [04.07.2006 20:00:58]

#

C++-ohjelmissa toisinaan pitää tyytyä C:n standardikirjastoon, syystä tai toisesta kaikkia sen ominaisuuksia ei ole uudestaan kerjoitettu. Valitettavati rename ei kuitenkaan kopioi tiedostoa vaan siirtää sen, kopiointiin ei ole valmista funktiota.

Sienessä [04.07.2006 20:06:33]

#

juu kiitoksia paljon!!

kooderi [05.07.2006 11:48:28]

#

Jos käyttiksenä on winukka, käytä tätä:

CopyFile

The CopyFile function copies an existing file to a new file.

BOOL CopyFile(
  LPCTSTR lpExistingFileName,
  LPCTSTR lpNewFileName,
  BOOL bFailIfExists
);

Ja linkki:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/copyfile.asp

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta