Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Delphi => Konuyu başlatan: z - 17 Mart 2014, 01:47:12

Başlık: Dosya olusturup icine veri yazmada olusan sorun.
Gönderen: z - 17 Mart 2014, 01:47:12
Delphide asagidaki kodu yazdim.

S icinde file name var. Bu isimde bir dosya olusturulup (varsa ezilip) icine 64K veri yaziliyor.

Program gercekten de bu isi yapiyor. Ancak;

64K lik dosya olusturturulduktan sonra bu dosyayi windowsdan silersem, programi (fonksiyonu) tekrar cagirirsam FileCreate normal calisiyor ve 0 uzunlugunda bir dosya olusturuyor. Ancak FileOpen isleminde FileHandle -1 oluyor haliyle de bundan sonraki islemler yapilmiyor ve dosyaya hic bir sey yazilamiyor.

Eger Delphi programi sonlandirip tekrar calistirirsam sorunsuz sekilde 64K dosya olusuyor.

Dosyayi sildigimde tekrar kodlari isletirsem  dosya olusturuldugu halde neden  open isleminde -1 donuyor?

Nerede hata yapiyorum?



     if not FileExists(S) then FileCreate(S);

     FileHandle := FileOpen(S, fmOpenWrite);

     Err:=1;
     
     if FileHandle<>-1 then
        begin
           i:=FileWrite(FileHandle,CncData,65536);
           if i=65536 then
              begin
                 Mesaj.Lines.Add(OutDir+' klasorunun icindeki dosyalari SD karta kopyalabilirsiniz');
                 Err:=0;
              end;
           FileClose(FileHandle);
        end;

     if Err=1 then Mesaj.Lines.Add(S+' dosyasi olusturulamadi');
Başlık: Ynt: Dosya olusturup icine veri yazmada olusan sorun.
Gönderen: z - 17 Mart 2014, 02:52:32
Kafayi yiyecegim. Gecmis yillarda ayni kodumu yazdim hatirlamiyorum ama hic sorun cikmiyordu.

Bu arada XP kullaniyorum.
Başlık: Ynt: Dosya olusturup icine veri yazmada olusan sorun.
Gönderen: z - 17 Mart 2014, 13:50:35
Yok hatami bulamadim.

Verdigim ornekteki low level file komutlari yerine daha yuksek seviyeli komutlarla binary bir dosya yaratip icine datalari nasil yazarim?

Buldugum rneklerde string yazilmis. Binary yazilanlari da kendime uyarlayamadim.

Benim Datalarimin yazildigi bir array var. Ancak bu array bir structure yapisinda.

Ornegin

Byte Byte Word Integer seklindeki yapi pes pese kendini tekrar ediyor.


Başlık: Ynt: Dosya olusturup icine veri yazmada olusan sorun.
Gönderen: t2 - 17 Mart 2014, 13:57:04
iş bitince
FileHandle :=nil; diyelim.  belki programı kapatmaya gerek kalmaz. işe yarayabilir.
Başlık: Ynt: Dosya olusturup icine veri yazmada olusan sorun.
Gönderen: aykuto - 17 Mart 2014, 14:00:57
Birde şu şekilde dener misiniz?

     if not FileExists(S) then
                 FileHandle:= FileCreate(S)
              else
                 FileHandle := FileOpen(S, fmOpenWrite);

     Err:=1;
     
     if FileHandle<>-1 then
        begin
           i:=FileWrite(FileHandle,CncData,65536);
           if i=65536 then
              begin
                 Mesaj.Lines.Add(OutDir+' klasorunun icindeki dosyalari SD karta kopyalabilirsiniz');
                 Err:=0;
              end;
           FileClose(FileHandle);
        end;

     if Err=1 then Mesaj.Lines.Add(S+' dosyasi olusturulamadi');



mesaj birleştirme:: 17 Mart 2014, 14:13:24

Alıntı YapDosyayi sildigimde tekrar kodlari isletirsem  dosya olusturuldugu halde neden  open isleminde -1 donuyor?

FileCreate fonksiyonu da aynen FileOpen fonksiyonu gibi bir FileHandle döndürür. FileCreate ile dosyayı oluşturduktan sonra FileClose ile kapatmazsanız, daha önce açılmış olan dosyayı yeniden açamazsınız. Açmanın da yolları var tabi. Detayları Delphi'nin yardım sayfalarında bulabilirsiniz.
Başlık: Ynt: Dosya olusturup icine veri yazmada olusan sorun.
Gönderen: z - 17 Mart 2014, 14:14:49
@Aykuta sagolasin.
     
      if not FileExists(S) then FileHandle:= FileCreate(S)
      else FileHandle := FileOpen(S, fmOpenWrite);


Hatam buymus.

fcreate'in helpine bakmamistim. Bu komutun da handle getirdigini bilmiyordum.