Delphi Can

Orjinalini görmek için tıklayınız: Dosya okuma ve yazma hakkında
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba, 

Ben delphi de bir dosyayı buffera alıp bazı değerleri değiştirip, bufferi dosya olarak kaydettikten sonra dosya boyutu çok büyük çıkıyor, nerede yanlış yapıyorum ? 
dosya 500 KB ama 185 MB ollarak çıkıyor Smile

if OpenDialog1.Execute then
   fsi:=TFileStream.Create(OpenDialog1.FileName, fmOpenRead + fmShareDenyNone);
  fsi.Position:=0;
  SetLength(TmpBuf, fsi.Size);
  ZeroMemory(TmpBuf,fsi.Size);
  L := Length(tmpbuf);
  while fsi.Position < fsi.Size do begin
   fsi.Read(TmpBuf[0], fsi.Size);
  end;
 fsi.Free;

// bufferda değişiklik 

 fsi:=TFileStream.Create('C:\new.dat', fmCreate + fmShareDenyNone);
   fsi.Position :=0;
      try
    if tmpbuf <> nil then
    fsi.Write(tmpbuf[0], Length(tmpbuf));
  finally
    fsi.Free
 end;
 end;



Sorun Çözüldü, Teşekkürler.

Smile

Sorun Nasıl Çözüldü?
(06-02-2019, Saat: 15:11)idealist Adlı Kullanıcıdan Alıntı: [ -> ]Sorun Nasıl Çözüldü?

Merhaba,

Kesinlikle bu sorunuza katılıyorum(!)

Destek için kullanılan forumda sonraki katılımcılar ve bizler içinde örnek
teşkil etmesi adına "çözümlerinde mutlaka paylaşılması" gerekiyor.

Kolay gelsin.
Sorudan yola çıkarak problemi öngörebiliriz aslında; hadi beyin fırtınası...

- Ben ilk aklıma gelen ihtimali yazayım; Temp buffer position (0)'lanmıyordu, dolayısıyla yedeğe her eklenen mevcudun sonuna ulanacağından sürekli balon gibi şişen bir temp buffer ürün FileStream'e ekleniyordu .  Wink
(06-02-2019, Saat: 16:27)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]Sorudan yola çıkarak problemi öngörebiliriz aslında; hadi beyin fırtınası...

- Ben ilk aklıma gelen ihtimali yazayım; Temp buffer position (0)'lanmıyordu, dolayısıyla yedeğe her eklenen mevcudun sonuna ulanacağından sürekli balon gibi şişen bir temp buffer ürün FileStream'e ekleniyordu .  Wink

@mrmarman, boşuna uğraşmayın. @dicle_gsm soruda değişiklik yapmış Smile
İlk halinde; 
SetLength(TmpBuf, fsi.Size * 512);
gibi bir şey vardı yanlış hatırlamıyorsam. Yani zaten mevcut boyutu 512 ile çarparak yeni bir buffer oluşturuluyordu. İş yoğunluğumdan cevap yazamamıştım. Şimdi cevaplamak istediğimde değiştiğini gördüm Smile
@SimaWB eyvallah, sorunun silinmediğine dua edelim  Smile

Teşekkürler.
(06-02-2019, Saat: 16:51)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]
(06-02-2019, Saat: 16:27)mrmarman Adlı Kullanıcıdan Alıntı: [ -> ]Sorudan yola çıkarak problemi öngörebiliriz aslında; hadi beyin fırtınası...

- Ben ilk aklıma gelen ihtimali yazayım; Temp buffer position (0)'lanmıyordu, dolayısıyla yedeğe her eklenen mevcudun sonuna ulanacağından sürekli balon gibi şişen bir temp buffer ürün FileStream'e ekleniyordu .  Wink

@mrmarman, boşuna uğraşmayın. @dicle_gsm soruda değişiklik yapmış Smile
İlk halinde; 
SetLength(TmpBuf, fsi.Size * 512);
gibi bir şey vardı yanlış hatırlamıyorsam. Yani zaten mevcut boyutu 512 ile çarparak yeni bir buffer oluşturuluyordu. İş yoğunluğumdan cevap yazamamıştım. Şimdi cevaplamak istediğimde değiştiğini gördüm Smile


Ewet, Gözümden kaçmıştı hocam orası Big Grin