CreateFile

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

CreateFile

Mesaj gönderen naile »

Bu hafta dosyalardan gidiyoruz bakalım :)

Program çalıştığında aynı klasörde bir dosyaya bakıyor eğer dosya yoksa CreateFile ile oluşturuyor. Ben programdan çıkmadıkca o dosyayı ReWrite ile açıp bilgi yazamıyorum I/O hatası veriyor. 2. sefer programı çalıştırdığımda dosya oluşmuş olduğundan bu hatayı vermiyor.

CreateFile dan sonra dosyayı close nasıl edebilirim?

ClosoFile(Dosya) diyemiyorum çünkü Dosya diye bir değişkenim yok (TextFile tipinde). CreateFile('ayarlar.cfg') şeklinde create ediyorum.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

eger text file kullanacaksanız
dosya degiskeni kullanarak
AssignFile,ReWrrite,CloseFile ile yapın
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Zaten dosyaya yazmak için AssignFile,ReWrrite,CloseFile leri kullanıyorum. Ama dosya yoksa oluşturmak için TextFile değişkenle değil string tipte dosya ismi ile oluşturuyorum. Ondan sonra ReWrite kullanırsam I/O hatası veriyor.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Naile tam anlayamadım problemi ama

1. FileExists - bir dosyanın olup olmadığını test eder.

2. Geçen gün gönderdiğin kod gayet güzel çalışıyordu, aynen kullansana. Ayrıca ReWrite ile kullandığında dosya varsa üzerine yazar, yoksa oluşturur. Yani dosya var yok kontrolüne gerek yok.

Kolay gelsin.
En son mussimsek tarafından 13 Oca 2004 03:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

ReWrite ın olmayan dosyayı oluşturduğunu bilmiyordum :D CreateFile yerine ReWrite ile açıp Close ettşm dosyayı hata vermedi, teşekkürler..
hakkus
Üye
Mesajlar: 160
Kayıt: 18 Haz 2003 12:02
Konum: Konya

Mesaj gönderen hakkus »

Merhabalar,
Aşağıdaki kod işinize yarayabilir;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
tekst:string;
dosya,uzunluk:integer;
begin
tekst:='Bu ilk Satır Boş Kalmasın';
uzunluk:=Length(tekst);
dosya:=fileCreate('c:\denemek2.txt'); /// dosya:=fileCreate('c:\denemek2.cfg')
fileWrite(dosya, uzunluk, sizeof(uzunluk));
FileClose(dosya);
fileOpen('c:\denemek2.txt', fmOpenWrite);
.
.
end;[code]
saygılar
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@hakkus Yazı; String tipinde değil de Char Array tipinde olmalı.

Kod: Tümünü seç

var
  Buffer : Array [0..2048] of Char;
  Text   : String;
  Dosya,
  Uzunluk  : Integer;
begin
  FillChar(Buffer, SizeOf(Buffer), #0);
  Text := 'Bu ilk Satır Boş Kalmasın';
  StrPCopy(Buffer, 'Bu ilk Satır Boş Kalmasın');
  Uzunluk   := Length(Text);
  Dosya     := FileCreate('C:\Deneme.TXT');
  FileWrite(Dosya, Buffer, Uzunluk);
  FileClose(Dosya);
@gkirmiti'nin söyledikleri aynen geçerlidir. Buna katılarak örnek yazıyorum.

Kod: Tümünü seç

Var
  TextDosya : TextFile;
begin
  AssignFile(TextDosya, 'C:\Deneme.TXT');
  FileMode := 2; // Read & Write
  ReWrite(TextDosya);
  WriteLn(TextDosya, 'Deneme');
  WriteLn(TextDosya, '123');
  CloseFile(TextDosya);
end;
- Özel fikrimi müsade ederseniz bildireyim, Varsayılan (Default) bilgileri tutmak, kaydetmek işlemleri için TINIFile'i öneriyorum.

- Değişkenleri kontrol etmesi, güncellemesi çok kolay.
- Dosya yoksa yine daha önce belirttiğiniz gerekçe için söylüyorum, ilk Write komutunu gördüğünde otomatik INI dosyası create ediliyor.

Değer Yazarken:

Kod: Tümünü seç

// Uses INIFiles;
Var
  INIDosya : TINIFile;
begin
  INIDosya := TINIFile.Create( 'C:\Deneme.INI');
  INIDosya.WriteString( 'ANA KISIM', 'Deneme', '123');
  INIDosya.Free;
  {Dosya Çıktısı}
  //[ANA KISIM]
  //Deneme=123
end;
Değer Okurken:

Kod: Tümünü seç

// Uses INIFiles;
Var
  INIDosya    : TINIFile;
  OkunanDeger : String;
begin
  INIDosya := TINIFile.Create( 'C:\Deneme.INI');
  // Yandaki 567 değeri isteğimize göre,
  // eğer Deneme başlığı INI dosyada yoksa varsayılan (Default) değeri döndürür.
  OkunanDeger := INIDosya.ReadString( 'ANA KISIM', 'Deneme', '567');
  INIDosya.Free;
  ShowMessage(OkunanDeger);
end;
Resim
Resim ....Resim
cunsey
Üye
Mesajlar: 31
Kayıt: 13 Haz 2003 10:03

Readİnifile

Mesaj gönderen cunsey »

İnifile ile ilgili sorum olacak bir programın içinde inifile oluşturuyorum bilgi yazıyorum okuyorum problem yok.

Fakat yazdım başka bir programda daha önce yarattığım inifileları
sadece okutmak istiyorum ama hata veriyo

Access vialation at address hatası

form show,button.click....

Kullanicix.text:=IniDosyasi.ReadString('Connect','LastUser',' ');
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

butona tıkladıgınızda adım adım gidip hangi satırda hata verdigini bulun
ini dosyayı Tinifile sınıfından olusturulan nesnenin create metodu ile olusturduktan sonra Free etmeniz gerek....
ÜŞENME,ERTELEME,VAZGEÇME
cunsey
Üye
Mesajlar: 31
Kayıt: 13 Haz 2003 10:03

Mesaj gönderen cunsey »

hatayı verdiği satır bu okuma yapamıyo

Kullanicix.text:=IniDosyasi.ReadString('Connect','LastUser',' ');
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

okuma şeklini Muharrem bey bir üst mesajda yazmış :

Kod: Tümünü seç

// Uses INIFiles;
Var
  INIDosya    : TINIFile;
  OkunanDeger : String;
begin
  INIDosya := TINIFile.Create( 'C:\Deneme.INI');
  // Yandaki 567 değeri isteğimize göre,
  // eğer Deneme başlığı INI dosyada yoksa varsayılan (Default) değeri döndürür.
  OkunanDeger := INIDosya.ReadString( 'ANA KISIM', 'Deneme', '567');
  INIDosya.Free;
  ShowMessage(OkunanDeger);
end; 
diğer satırlar var mı kodunuzda? Mesela Create kodu.

Kolay gelsin.
cunsey
Üye
Mesajlar: 31
Kayıt: 13 Haz 2003 10:03

Mesaj gönderen cunsey »

Ben şöyle anlatayım olayı ana bir program var o programda inidosyasını create ediyom inidosyasına yazdırıyom okutuyom fakat bu ana programın içinde bir link verdim farklı bir exe çalıştırıyo bağımsız ana programın create ettiği ini dosyasını sadece okutmak istiyom .Çünkü bilgiler orda ana programın kriterlerine göre oluşturuyo inidoyasını

Kullanıcıları tutuyo bu inifile yetkilendirme için kullanıyom çalıştırmak istediğimde faklı bitr modül.

yardımlarınız için teşekkürler
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

hocam create kodu burda dosyayı oluşturmak için kullanılmıyor zaten. Okuma yapacaksanız yukarıdaki formatta yapmanız lazım. Bu formatta yazmıyorsanız hata almanız normal.

Bence Muharrem beyin mesajını dikkatle okuyun.

Kolay gelsin.
cunsey
Üye
Mesajlar: 31
Kayıt: 13 Haz 2003 10:03

Mesaj gönderen cunsey »

Anladım ben tekrar dosya yaratmak olarak düşündüm o yüzden bu formatta denemedim şimdi çalışıyor yardımlarınız için herkese teşekkürler
Cevapla