[ Passwd @ 06.04.2005. 16:41 ] @
Kako napravit program koji ce skopirati jednu datoteku na neko drugo mjesto na disku? |
[ Passwd @ 06.04.2005. 16:41 ] @
[ Srki_82 @ 06.04.2005. 16:56 ] @
program bi izgledao otprilike ovako
Code: const BuffSize = 32 * 1024; // 32 kb var SrcFile, DestFile: File; Buff: Pointer; R: Word; SrcName, DestName: String; begin // Ne znam kako zelis da dodjes do imena fajlova // taj deo napisi sam // mozes korisiti ParamStr promenljivu za to GetMem(Buff, BuffSize); Assign(SrcFile, SrcName); Assign(DestFile, DestName); Reset(SrcFile, 1); Rewrite(DestFile, 1); while not Eof(SrcFile) do begin BlockRead(SrcFile, Buff^, BuffSize, R); BlockWrite(DestFile, Buff^, R); end; Close(SrcFile); Close(DestFile); FreeMem(Buff); end. Mozda ima po neka greska jer sam ovo pisao iz glave, ali to je princip. [ Passwd @ 06.04.2005. 18:49 ] @
Nisam napomenio da imam borland turbo pascal,tako da ne rade neke naredbe kao i u freepascalu (get,put...).Ne kuzim ovaj program sto si ga gore napisao.
Evo primjer:na c disku postji datoteka sllika.jpg, a ja trebam program koji ce tu sliku.jpg prebaciti na drugo mjesto (npr.:d disk).A kako da mu napisem gdje da kopira taj fajl i koji fajl?? [ Srki_82 @ 06.04.2005. 23:06 ] @
Ovaj kod je Borland Turbo Pascal 7... kod je vrlo jednostavan
Code: const BuffSize = 32 * 1024; // 32 kb Ovaj deo odredjuje velicinu bafera koji ce se koristiti za prenos... 32kb je sasvim dovoljno, ali mozes da ga povecas do max 64k Code: var SrcFile, DestFile: File; Buff: Pointer; R: Word; SrcName, DestName: String; SrcFile i DestFile su promenljive koje identifikuju datoteke... SrcFile fajl koji zelis da kopiras, a DestFile je nov fajl koji se dobija kopiranjem. Buff je bafer koji se koristi za kopiranje... prvo se iz izvornog fajla procita odredjeni broj bajtova u bafer pa se iz bafera ti bajtovi upisu u nov fajl. R je promenljiva koja se koristi prilikom citanja i pisanja bajtova. Kada procitamo bajtove iz izvornog fajla mi zatrazimo BuffSize bajtova, ali ne mora da znaci da je toliko ostalo u izvrsnom fajlu da se procita pa nam u R ostaje stvaran broj procitanih bajtova koje treba da upisemo u nov fajl. SrcName i DestName su imena fajlova. To je jedino sto treba da das programu da bi mogao da odradi svoj posao. Ako hoces da kopiras sllika.jpg sa C: na D: onda je SrcName := 'C:\sllika.jpg', a DestName := 'D:\sllika.jpg'; Code: GetMem(Buff, BuffSize); Assign(SrcFile, SrcName); Assign(DestFile, DestName); Reset(SrcFile, 1); Rewrite(DestFile, 1); Ovaj deo zauzima memoriju za bafer koji ce nam sluziti za kopiranje i otvara izvorni fajl za citanje i nov fajl za pisanje. Ovde je sve jasno. Code: while not Eof(SrcFile) do begin BlockRead(SrcFile, Buff^, BuffSize, R); BlockWrite(DestFile, Buff^, R); end; Ovo je deo koji radi kopiranje. Dok izvorni fajl nije procitan do kraja izvrsava se while petlja. U bafer se ucitava BuffSize bajtova i u R dobijamo tacan broj bajtova koji smo dobili. Zatim se iz bafera upisuje R bajtova u nov fajl i tako sve do kraja izvornog fajla. Code: Close(SrcFile); Close(DestFile); FreeMem(Buff); Na kraju zatvaramo oba fajla i oslobadjamo memoriju koju smo koristila za baferovanje podataka. To je cela mudrost... od ovog mozes napraviti proceduru npr. CopyFile koja uzima dva stringa SrcName i DestName i jednostavno mozes da je pozoves kao CopyFile('C:\slika.jpg', 'D:\slika.jpg'); Nadam se da ti je sad jasno. [ bancika @ 07.04.2005. 15:41 ] @
a sta fali CopyFile(Source, Destination, Overwrite)?
[ Srki_82 @ 07.04.2005. 17:11 ] @
U TP 7 to ne postoji, zar ne?
[ Passwd @ 07.04.2005. 19:05 ] @
Lijepo si to pojasnio,svaka cast.
Hvala!! [ Vdjuric @ 07.04.2005. 23:59 ] @
Trebalo bi tu ubaciti jos i proveru da li je citanje / zapisivanje odradjeno kako treba... preko ioresult promenljive i {$I-}, {$I+} direktiva kompajleru, i to je to...
poz Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|