crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Dosya İşlemleri: Veriyi Kalıcı Hale Getirmek
Dosya işlemleri üç ana sınıf üzerinden yürütülür: ofstream (yazma), ifstream (okuma) ve her ikisini de yapabilen fstream.
1. Dosyaya Yazma (ofstream)
Bir dosyaya veri yazmak, cout kullanmaya çok benzer. Tek fark, veriyi ekrana değil, oluşturduğunuz dosya nesnesine yönlendirmenizdir.
C++:
#include <fstream>
#include <iostream>
int main() {
std::ofstream dosyaYaz("notlar.txt"); // Dosyayi ac (yoksa olusturur)
if (dosyaYaz.is_open()) {
dosyaYaz << "C++ Dosya Islemleri Rehberi\n";
dosyaYaz << "Bu satir dosyaya kaydedildi.";
dosyaYaz.close(); // Islemi bitirince dosyayi mutlaka kapat
}
return 0;
}
2. Dosyadan Okuma (ifstream)
Dosyadan veri okurken satır satır mı yoksa kelime kelime mi okuyacağımıza karar vermemiz gerekir. getline() fonksiyonu, satırın tamamını okumak için en güvenli yoldur.
C++:
#include <fstream>
#include <string>
std::ifstream dosyaOku("notlar.txt");
std::string satir;
if (dosyaOku.is_open()) {
while (std::getline(dosyaOku, satir)) { // Dosya sonuna kadar oku
std::cout << satir << std::endl;
}
dosyaOku.close();
}
3. Dosya Açma Modları
Dosyayı açarken varsayılan davranışları değiştirebilirsiniz. Örneğin, dosyanın üzerine yazmak yerine sonuna ekleme yapmak isteyebilirsiniz.
| Mod | Açıklama |
|---|---|
| std::ios: | Yazma modu (varsayılan). Dosya varsa içeriğini siler. |
| std::ios::app | Append (Ekleme): Veriyi dosyanın sonuna ekler. |
| std::ios::in | Okuma modu. |
| std::ios::binary | Dosyayı metin olarak değil, ikili (binary) formatta açar. |
4. Binary (İkili) Dosya İşlemleri
Metin dosyaları (.txt) insanlar tarafından okunabilir, ancak büyük verileri veya sınıfları/yapıları saklamak için Binary format çok daha hızlı ve az yer kaplar.
C++:
struct Oyuncu {
int id;
float puan;
};
// Binary Yazma
Oyuncu p1 = {1, 95.5};
std::ofstream outBin("data.dat", std::ios::binary);
outBin.write((char*)&p1, sizeof(Oyuncu));
outBin.close();
// Binary Okuma
Oyuncu p2;
std::ifstream inBin("data.dat", std::ios::binary);
inBin.read((char*)&p2, sizeof(Oyuncu));
Sonuç
Dosya işlemleri yaparken en sık karşılaşılan hata, dosyanın açılamama ihtimalini (dosya yoksa veya izin yoksa) kontrol etmemektir. Her zaman is_open() kontrolü yapmak sizi beklenmedik çökmelerden kurtarır. Ayrıca, modern C++'ta dosya nesnesi kapsam dışına çıktığında (destructor çalıştığında) otomatik kapanır, ancak manuel olarak close() yapmak alışkanlık açısından iyidir.