

13. Dosya İşlemleri (File I/O) – Temel Seviye
Delphi programlama dilinde dosya işlemleri (File I/O), programınızın dış dünya ile iletişim kurmasını sağlayan temel bir yetenektir. Bu, verilerin kalıcı olarak saklanması, yapılandırılmış verilerin okunması, log dosyalarının oluşturulması veya farklı uygulamalar arasında veri alışverişi gibi birçok senaryoda kullanılır. Bu makalede, Delphi’de dosya işlemlerinin temel seviyesine odaklanacağız ve dosya okuma, yazma ve yönetme konularını ele alacağız.
Dosya İşlemlerine Giriş
Dosya işlemleri, programınızın disk üzerindeki dosyalarla etkileşim kurmasını içerir. Bu etkileşim, dosyaları açma, okuma, yazma, kapatma ve silme gibi işlemleri kapsar. Delphi, dosya işlemlerini gerçekleştirmek için çeşitli fonksiyonlar ve nesneler sunar.
Dosya Türleri
Delphi’de, temelde iki tür dosya bulunur:
- Metin Dosyaları (Text Files): ASCII veya Unicode karakterler içeren dosyalardır. İnsan tarafından okunabilir formatta veri saklarlar.
- İkili Dosyalar (Binary Files): Herhangi bir türde veri (sayılar, yapılar, nesneler vb.) içerebilen dosyalardır. Genellikle insan tarafından doğrudan okunamazlar.
Metin Dosyası İşlemleri
Metin dosyaları, genellikle yapılandırılmış verileri saklamak ve işlemek için kullanılır. Delphi’de metin dosyalarıyla çalışmak için `TextFile` türünü ve ilgili fonksiyonları kullanırız.
Dosya Açma ve Kapama
Bir metin dosyasını açmak için `AssignFile`, `Reset` (okuma için) veya `Rewrite` (yazma için) fonksiyonları kullanılır. Dosya işlemleri tamamlandıktan sonra `CloseFile` fonksiyonu ile dosya kapatılmalıdır.
var
MyFile: TextFile;
begin
AssignFile(MyFile, 'data.txt');
Rewrite(MyFile); // Yeni bir dosya oluştur veya varsa üzerine yaz
// Dosyaya yazma işlemleri
CloseFile(MyFile);
end;
Okuma için ise:
var
MyFile: TextFile;
begin
AssignFile(MyFile, 'data.txt');
Reset(MyFile); // Dosyayı okuma modunda aç
// Dosyadan okuma işlemleri
CloseFile(MyFile);
end;
Dosyaya Yazma
Metin dosyasına veri yazmak için `Write` veya `WriteLn` fonksiyonları kullanılır. `Write`, veriyi olduğu gibi dosyaya yazarken, `WriteLn` veriyi yazdıktan sonra bir satır sonu karakteri ekler.
var
MyFile: TextFile;
begin
AssignFile(MyFile, 'output.txt');
Rewrite(MyFile);
WriteLn(MyFile, 'Merhaba, Dünya!');
WriteLn(MyFile, 'Bu bir Delphi örneğidir.');
CloseFile(MyFile);
end;
Dosyadan Okuma
Metin dosyasından veri okumak için `Read` veya `ReadLn` fonksiyonları kullanılır. `Read`, belirli sayıda karakteri okurken, `ReadLn` bir satır sonuna kadar okur.
var
MyFile: TextFile;
Line: string;
begin
AssignFile(MyFile, 'output.txt');
Reset(MyFile);
while not Eof(MyFile) do
begin
ReadLn(MyFile, Line);
ShowMessage(Line); // Okunan satırı göster
end;
CloseFile(MyFile);
end;
`Eof(MyFile)` fonksiyonu, dosyanın sonuna gelinip gelinmediğini kontrol eder. Bu, döngü içinde dosya okurken önemlidir.
İkili Dosya İşlemleri
İkili dosyalar, yapılandırılmış verileri daha verimli bir şekilde saklamak için kullanılır. Delphi’de ikili dosyalarla çalışmak için `File` türünü ve ilgili fonksiyonları kullanırız.
Dosya Açma ve Kapama (İkili)
İkili dosyaları açmak için `AssignFile`, `Reset` (okuma için) veya `Rewrite` (yazma için) fonksiyonları kullanılır. Ancak, ikili dosyalar için `File` türü kullanılır.
var
MyFile: File;
begin
AssignFile(MyFile, 'data.bin');
Rewrite(MyFile, 1); // Boyut parametresi (genellikle 1 kullanılır)
// Dosyaya yazma işlemleri
CloseFile(MyFile);
end;
Okuma için:
var
MyFile: File;
begin
AssignFile(MyFile, 'data.bin');
Reset(MyFile, 1); // Boyut parametresi (genellikle 1 kullanılır)
// Dosyadan okuma işlemleri
CloseFile(MyFile);
end;
Dosyaya Yazma (İkili)
İkili dosyaya veri yazmak için `BlockWrite` fonksiyonu kullanılır. Bu fonksiyon, bir bellek bloğunu doğrudan dosyaya yazar.
var
MyFile: File;
Data: array[0..9] of Integer;
i: Integer;
begin
AssignFile(MyFile, 'data.bin');
Rewrite(MyFile, SizeOf(Integer));
// Veri doldur
for i := 0 to 9 do
Data[i] := i * 10;
BlockWrite(MyFile, Data, SizeOf(Data));
CloseFile(MyFile);
end;
Dosyadan Okuma (İkili)
İkili dosyadan veri okumak için `BlockRead` fonksiyonu kullanılır. Bu fonksiyon, dosyadan bir bellek bloğunu okur.
var
MyFile: File;
Data: array[0..9] of Integer;
i: Integer;
BytesRead: Integer;
begin
AssignFile(MyFile, 'data.bin');
Reset(MyFile, SizeOf(Integer));
BlockRead(MyFile, Data, SizeOf(Data), BytesRead);
// Okunan veriyi işle
for i := 0 to 9 do
ShowMessage(IntToStr(Data[i]));
CloseFile(MyFile);
end;
`BlockRead` fonksiyonu, okunan byte sayısını `BytesRead` parametresinde döndürür. Bu, dosyanın sonuna ulaşıldığında veya bir hata oluştuğunda önemlidir.
Ek Fonksiyonlar ve Dikkat Edilmesi Gerekenler
- FileExists(FileName: string): Boolean: Dosyanın var olup olmadığını kontrol eder.
- DeleteFile(FileName: string): Boolean: Dosyayı siler.
- RenameFile(OldName, NewName: string): Boolean: Dosyanın adını değiştirir.
- Dosya işlemlerinde hata kontrolü önemlidir. `IOResult` değişkenini kullanarak hataları kontrol edebilirsiniz.
- Dosyaları açarken ve kapatırken dikkatli olun. Açık unutulan dosyalar, kaynak tüketimine ve veri kaybına neden olabilir.
Sonuç
Delphi’de dosya işlemleri, uygulamalarınızın dış dünya ile etkileşim kurmasını sağlayan güçlü bir araçtır. Bu makalede, temel metin ve ikili dosya işlemlerini ele aldık. Bu bilgilerle, kendi uygulamalarınızda dosya okuma, yazma ve yönetme işlemlerini gerçekleştirebilirsiniz. Unutmayın, dosya işlemlerinde dikkatli olmak ve hata kontrolünü ihmal etmemek önemlidir.
Dosya işlemleri konusunu daha derinlemesine incelemek için Delphi’nin online yardımına ve çeşitli kaynaklara başvurabilirsiniz. Başarılar!
Önemli Not: Bu makale temel seviyede dosya işlemlerini kapsamaktadır. Daha karmaşık senaryolar için, örneğin veritabanı işlemleri veya ağ üzerinden dosya transferi, daha gelişmiş teknikler ve kütüphaneler kullanmanız gerekebilir.
Umarım bu makale Delphi programlama dilinde dosya işlemleri konusunda size yardımcı olmuştur. İyi kodlamalar!
Bir yanıt bırakın