Kako napravit program koji ce skopirati jednu datoteku na neko drugo mjesto na disku?
Kopiranje u pascalu???????
Zaključano
Zakačeno
program bi izgledao otprilike ovako
Mozda ima po neka greska jer sam ovo pisao iz glave, ali to je princip.
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.
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.
Potpis
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??
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??
Ovaj kod je Borland Turbo Pascal 7... kod je vrlo jednostavan
Ovaj deo odredjuje velicinu bafera koji ce se koristiti za prenos... 32kb je sasvim dovoljno, ali mozes da ga povecas do max 64k
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';
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.
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.
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.
Code:
const
BuffSize = 32 * 1024; // 32 kb
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;
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);
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;
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);
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.
Potpis
a sta fali CopyFile(Source, Destination, Overwrite)?
Potpis
U TP 7 to ne postoji, zar ne?
Potpis
Lijepo si to pojasnio,svaka cast.
Hvala!!
Hvala!!
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
poz