dosya download etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

dosya download etmek

Mesaj gönderen White Rose »

s.a.

arkadaşlar
UrlDownLoadToFile(nil,Pchar('http://www.filansite.com/klasor/Dosya.ini'),Pchar('d:\dosya.ini'),0,Nil);
komutu ile siteden dosya download ediyorum.
ancak program timer içinde bu komutu periyodik aralıklarla çalıştırıyor ve dosya download ediliyor , fakat
bu arada inenen dosyanın içeriğini run time anında alamıyorum. Ini dosyasının bilgilerini labellere yazdırmam gerekiyor.
Programı kapatıp, yeniden çalıştırınca o zaman ini dosyasının içeriğin alabiliyorum.
Birçok yol denedim
Dosyayı download etmeden önce eskisini sildim.
Dosyayı refresh ettim
labelleri refresh ettim
bir türlü olmadı.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: dosya download etmek

Mesaj gönderen Battosai »

tahminimce kullandığınız download methodu bir kere download ettikten sonra cache den verileri alıyor...download işini idhttp ile yaparsanız böyle bir sorun olmaz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: dosya download etmek

Mesaj gönderen thelvaci »

Aşağıdaki linkler işinize yarayabilir.

TIdHTTP Partial Download(Parça Parça Download)
http://www.tugrulhelvaci.com/?p=273

BITS(Background Intelligent Transfer Service) ile sessiz sedasız download ;)
http://www.tugrulhelvaci.com/?p=258
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: dosya download etmek

Mesaj gönderen White Rose »

downloadda sorun yok arkadaşlar ben timer içinde belirli araıklarla dosya download ediyorum, bunda sorun yok.
sorun dosya download edildikten sonra içeriğini ekrana yazdırmak, bu işlemler periyodik olarak timer içinde
gerçekleçmektedir. cevaplarınızı bekliyorum, şimdiden teşekkür edrim.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: dosya download etmek

Mesaj gönderen conari »

Kod: Tümünü seç

application.progresmessage
ekle
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: dosya download etmek

Mesaj gönderen White Rose »

program download edileceği zaman timeri durduruyorum

sorun devam ediyor yine olmadı...
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: dosya download etmek

Mesaj gönderen thelvaci »

Tekrar merhaba, download işini yaptırdığınız API fonksiyonu ilgili dosyayı yazma korumalı olarak açmış olabilir ve siz de o dosyayı TIniFile ile açmaya çalışıyorsanız hata alıyor olabilirsiniz. Nihayetinde TIniFile sınıfı ilgili dosyaya yazma ve okuma erişimleri hakkına sahip olmak isteyecektir. Gerçi hata alıp almadığınızı belirtmemişsiniz. TFileStream ile ilgili dosyayı sadece okuma modunda açmayı deneyebilirmisiniz download işleminin hemen ardından.
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: dosya download etmek

Mesaj gönderen White Rose »

arkadaşlar merhaba sanırım ben sorunumu tam olarak anlatamadım.
download da sorun yok program belirli aralıklarla timeri durduruyor dosyayı download ediyor
download edilen dosyayı o an okutup içeriğini ekrana yazdırıp sonra tekrar timeri çalıştırıp bu şekilde devam edecek.
timer düzenli olaraK çalışıyor, dosya download ediliyor buralarda sorun yok.
sorun download edilen dosyanın run-time anında içeriğini ekrana yazdırmak.
çünkü programı kapatıp tekrar çalıştırınca bilgiler o zaman ekrana geliyor

kod aşağıdadır.
procedure TAnaform.SaatTimer(Sender: TObject);
begin
Inc(Dak0);
Lbl_Guncelleme1.Caption:=FloatToStr((Gun_Ara_Dak*60)-Dak0);
If Dak0>=Gun_Ara_Dak*60 Then Begin
Dak0:=0;
Guncelle;
application.ProcessMessages;
end;

procedure Tanaform.Guncelle;
Begin
If Internetgetconnectedstate(@BagDrm, 0) Then Begin // internet bağlantısı varsa: bagdrm word
Try
UrlDownLoadToFile(nil,Pchar('http://www.mysite.com/klasor/liste.txt'),Pchar('d:\klasor\liste.txt'),0,Nil);
Except
// Hata
End;
End;

if fileexists(PrgDizin+Liste_txt) then begin
ListBox1.Items.LoadFromFile(PrgDizin+Liste_txt);
end;
end;

liste.txt download ediliyor ancak içindeki bilgileri run time anında göremiyorum, programı kapatıp açınca görüyorum, sorun bu
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: dosya download etmek

Mesaj gönderen thelvaci »

ListBox1.Items.LoadFromFile(PrgDizin+Liste_txt);
Yukarıdaki satırı çalıştırdığınızda herhangi bir hata alıyor musunuz ?
Ayrıca TFileStream ile ilgili dosyayı sadece okuma modunda açmayı deneyebilirmisiniz download işleminin hemen ardından.
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: dosya download etmek

Mesaj gönderen White Rose »

sorunuma hala çözüm bulamadım,
UrlDownLoadToFile fonksiyonu program çalıştığında bir defa dosya indiriyor bir daha indirmiyor,
programı kapatıp açınca tekrar dosyayı indiriyor. benim istediğim timer içinde belirli
aralıklarla dosya indirmesi. Çünkü bu dosya arada bir güncelleniyor. Bu dosyanın içeriğini
alıp listboxa atmam gerekiyor. Timer içinde Application.ProcessMessages kullanıyonum, bu çözüm olmadı.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: dosya download etmek

Mesaj gönderen Battosai »

tahminimce kullandığınız download methodu bir kere download ettikten sonra cache den verileri alıyor...download işini idhttp ile yaparsanız böyle bir sorun olmaz.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: dosya download etmek

Mesaj gönderen emin_as »

Windowsdaki meşhur hata yüzünden, download fonksiyonu dogru çalışmıyor. Internetteki dosya değişmiş bile olsa, dogrudan cache de bulunan daha önceki dosyayı veriyor.

Çözüm aşagıdaki gibi bir fonksiyon kullanmak gerekiyor.

Kod: Tümünü seç

const
  BINDF_ASYNCHRONOUS            = $00000001;
  BINDF_ASYNCSTORAGE            = $00000002;
  BINDF_NOPROGRESSIVERENDERING  = $00000004;
  BINDF_OFFLINEOPERATION        = $00000008;
  BINDF_GETNEWESTVERSION        = $00000010;
  BINDF_NOWRITECACHE            = $00000020;
  BINDF_NEEDFILE                = $00000040;
  BINDF_PULLDATA                = $00000080;
  BINDF_IGNORESECURITYPROBLEM   = $00000100;
  BINDF_RESYNCHRONIZE           = $00000200;
  BINDF_HYPERLINK               = $00000400;
  BINDF_NO_UI                   = $00000800;
  BINDF_SILENTOPERATION         = $00001000;
  BINDF_PRAGMA_NO_CACHE         = $00002000;
  BINDF_GETCLASSOBJECT          = $00004000;
  BINDF_RESERVED_1              = $00008000;
  BINDF_FREE_THREADED           = $00010000;
  BINDF_DIRECT_READ             = $00020000;
  BINDF_FORMS_SUBMIT            = $00040000;
  BINDF_GETFROMCACHE_IF_NET_FAIL= $00080000;
  BINDF_FROMURLMON              = $00100000;
  BINDF_FWD_BACK                = $00200000;
  BINDF_PREFERDEFAULTHANDLER    = $00400000;
  BINDF_RESERVED_3              = $00800000;

function DownloadToFile(URL, FileName: String): Boolean;
var
  lpszFile : array [0..MAX_PATH] of Char;
begin
  if (URLDownloadToCacheFile(nil, PChar(URL), @lpszFile, MAX_PATH, BINDF_GETNEWESTVERSION, nil) = S_OK) then
     result:=CopyFile(@lpszFile, PChar(FileName), False)
  else
     result:=False;
end;
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Re: dosya download etmek

Mesaj gönderen White Rose »

cevaplar için teşekkürler arkadaşlar idhttp ile halloldu.
Cevapla