Dosya olusturup icine veri yazmada olusan sorun.

Başlatan z, 17 Mart 2014, 01:47:12

z

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');
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Kafayi yiyecegim. Gecmis yillarda ayni kodumu yazdim hatirlamiyorum ama hic sorun cikmiyordu.

Bu arada XP kullaniyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

iş bitince
FileHandle :=nil; diyelim.  belki programı kapatmaya gerek kalmaz. işe yarayabilir.

aykuto

#4
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.

z

@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.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com