Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 2.820 pregleda

Najnovija ↓

Kopiranje u pascalu??????? 06.04.2005. u 17:41 · pre 262 meseca #1
Kako napravit program koji ce skopirati jednu datoteku na neko drugo mjesto na disku?
Re: Kopiranje u pascalu??????? 06.04.2005. u 17:56 · pre 262 meseca #2
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.
Potpis
Play Store
Re: Kopiranje u pascalu??????? 06.04.2005. u 19:49 · pre 262 meseca #3
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??
Re: Kopiranje u pascalu??????? 07.04.2005. u 00:06 · pre 262 meseca #4
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.
Potpis
Play Store
Re: Kopiranje u pascalu??????? 08.04.2005. u 00:59 · pre 262 meseca #8
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
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme