Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Treba mi mala pomoc oko kopiranja fajlova?!

[es] :: Pascal / Delphi / Kylix :: Treba mi mala pomoc oko kopiranja fajlova?!

[ Pregleda: 566 | Odgovora: 9 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.neobee.net.



Profil

icon Treba mi mala pomoc oko kopiranja fajlova?!20.05.2006. u 12:23

Pozdrav...

Treba mi mala pomoc oko kopiranja fajlova sa jedne lokacije na drugu. Naime, fajl koji zelim da kopiram biram na osnovu DriveComboBox1, DirectoryListBox1, FileListBox1. Kad ga izaberem, pojavi se npr. Datoteka.txt u TEdit-u koji je povezan sa FileListBox1. Postavio sam jos jedan TEdit u koji se unosi link ka destinaciji kopiranja. Znaci, treba mi da Datoteka.txt se prekopira na odredjenu destinaciju koju izaberemo.
Uz sve to postavio sam i TProgressBar da prikaze proces. Dakle, zelim da uskladim kopiranje sa TBrogressBar komponentom, da ona pokazuje dokle je fajl iskopiran.
BTW, upload-ovao sam primer, pa kad ga vidite, bice vam jasnije i mislim da nece biti problemada mi pomognete...

Hvala unapred...
If you go out of your mind, do it quietly, so as not to disturb those around you...
Prikačeni fajlovi
20.05.2006. u 12:23 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1464
*.adsl.sezampro.yu.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!20.05.2006. u 19:37
Možeš koristiti SHFileOperation i iskoristiti gotovi progress dijalog (kao onaj u Exploreru). Ako je potrebno da prikazuješ progress u svom programu onda je jedno rešenje CopyFileEx funkcije, u njoj možeš navesti callback rutinu tako da ćeš dobijati obaveštenja kako kopiranje napreduje i moći ćeš da prikazuješ progres. A možeš i sve sam raditi, napraviti dva TFileStream (ili handla preko CreateFile) jedan za osnovnu datoteku a drugi za odredišnu i posle toga kopirati deo po deo datoteke.
20.05.2006. u 19:37 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.neobee.net.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!20.05.2006. u 20:25
Mozes li mi to malo pribliziti na ovom mom primeru?!
If you go out of your mind, do it quietly, so as not to disturb those around you...
20.05.2006. u 20:25 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.neobee.net.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!20.05.2006. u 20:45
Pogledao sam u helpu CopyFileEx i napravio nesto, upload, ali bi hteo to upotpuniti sa TProgressBar? Ajd pogledajte primer pa vidite sta moze da se odradi?!
If you go out of your mind, do it quietly, so as not to disturb those around you...
Prikačeni fajlovi
20.05.2006. u 20:45 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1464
*.adsl.sezampro.yu.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!20.05.2006. u 22:09
Iskoristio sam ovaj tvoj primer i samo dodao jedan progresbar kako bi ti bilo što lakše, ali imaj na umu da ovo može čistije i efikasnije da se napiše.

Code:

procedure TForm1.Button1Click(Sender: TObject);
const
  BUF_SIZE = 65536;
var
  NewFileName: string;
  Msg: string;
  NewFile: TFileStream;
  OldFile: TFileStream;
begin
  NewFileName := edSelected.text+ '\' + ExtractFileName(Edit1.Text);
  Msg := Format('Copy %s to %s?', [Edit1.Text, NewFileName]);
  if MessageDlg(Msg, mtCustom, mbOKCancel, 0) = mrOK then
  begin
    OldFile := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
    ProgressBar1.Max := OldFile.Size;
    try
      NewFile := TFileStream.Create(NewFileName, fmCreate or fmShareDenyRead);
      try
        while NewFile.Size < OldFile.Size do
        begin
          NewFile.CopyFrom(OldFile, Min(OldFile.Size - OldFile.Position, BUF_SIZE));
          ProgressBar1.Position := NewFile.Size;
        end;
      finally
        FreeAndNil(NewFile);
      end;
    finally
      FreeAndNil(OldFile);
    end;
  end;
end;

20.05.2006. u 22:09 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!21.05.2006. u 02:41
Prvo, hvala na odgovoru,
drugo, kad smo vec kod cistijeg, lepse i kvalitetnije napisanog koda, ajde da to i odradimo... Za pocetak, u kodu koji si postavio, savkic, prijavljuje se greska u redu:
Code:
NewFile.CopyFrom(OldFile, Min(OldFile.Size - OldFile.Position, BUF_SIZE));

Undeclared Min, tako nesto, uglavnom treba se deklarisati Min. Poznato mi je da delphi ima funkciju min:
Code:

function Min(A,B: Integer): Integer; overload;
function Min(A,B: Int64): Int64; overload;
function Min(A,B: Single): Single; overload;
function Min(A,B: Double): Double; overload;
function Min(A,B: Extended): Extended; overload;

ali i kad to odradim,Min: Int64; tad prikaze isti red:
Code:
NewFile.CopyFrom(OldFile, Min(OldFile.Size - OldFile.Position, BUF_SIZE));

ali poruka o gresci izgleda ovako: [Error] Unit1.pas(130): Missing operator or semicolon?!
Ajde da to resimo, prvo, ok?

[Ovu poruku je menjao loshmiscg dana 21.05.2006. u 03:51 GMT+1]
If you go out of your mind, do it quietly, so as not to disturb those around you...
21.05.2006. u 02:41 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1464
*.adsl.sezampro.yu.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!21.05.2006. u 06:15
Min je funkcija iz Math unita, samo ga trebaš dodati u uses klauzulu. Primedba na kod se odnosila na taj copy primer sa progresom koji sam poslao, može da prođe kao primer ali ako ti treba za nešto ozbiljnije onda definitivno može bolje da se napiše.

[Ovu poruku je menjao savkic dana 21.05.2006. u 07:40 GMT+1]
21.05.2006. u 06:15 

Miloš Baić
Miloš Baić

Član broj: 72468
Poruke: 1150
*.dialup.neobee.net.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!21.05.2006. u 12:27
Pozdrav,

e, sad je vec druga prica... Funkcionise... Probao sam isto i sa TGauge komponentom, takodje, funkcionise...
Kako bi mogao odraditi da posle kopiranja se TGauge resetuje na 0?
Mogucnost prekida kopiranja, tzv. Cancel?
If you go out of your mind, do it quietly, so as not to disturb those around you...
21.05.2006. u 12:27 

Nemanja Avramović
PHP developer, Webinsane
Mladenovac, Srbija

Član broj: 32202
Poruke: 3992
195.252.99.*

ICQ: 266136396
Sajt: www.avramovic.info


Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!21.05.2006. u 19:18
Verovatno negde treba da ubaciš samo:

Code:
if (ProgressBar1.Position = NewFile.Size) then ProgressBar1.Position:=0;


...a gde? Snađi se
Moj sajt. Moj blog. Moj avatar. Moj grad. Moja frizura.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
21.05.2006. u 19:18 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1464
*.adsl.sezampro.yu.



Profil

icon Re: Treba mi mala pomoc oko kopiranja fajlova?!21.05.2006. u 20:53
> Kako bi mogao odraditi da posle kopiranja se TGauge resetuje na 0?

Samo postaviš position i/ili max na 0.

> Mogucnost prekida kopiranja, tzv. Cancel?

Ubaciš u while petlju proveru nekog uslova, na primer da li je pritisnut ESC taster pa ako jeste izađeš iz petlje. Kod bi otprilike išao (dole imaš implementaciju IsKeyDown funkcije pa je najpre ubaci negde):

if IsKeyDown(VK_ESCAPE) then
Break;

function IsKeyDown(const AKey: Integer): Boolean;
begin
Result := Windows.GetAsyncKeyState(AKey) and $8000 = $8000;
end;


21.05.2006. u 20:53 

[es] :: Pascal / Delphi / Kylix :: Treba mi mala pomoc oko kopiranja fajlova?!

[ Pregleda: 566 | Odgovora: 9 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.