Mehmet

WFN Üye
Konular
1,095
Mesajlar
1,096
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
C++’ta başka bir dosyaya yazmak için <fstream> başlığındaki std::ofstream sınıfını kullanın. Dosyayı yazma amacıyla açın, metni << işleciyle gönderin ve dosyanın başarıyla açıldığını kontrol edin. Dosya yoksa oluşturulur; dosya zaten varsa varsayılan davranış mevcut içeriği silip yeni içeriği yazmaktır. Mevcut içeriği koruyup sonuna eklemek istiyorsanız std::ios::app kipini kullanmalısınız.

Dosyaya temel metin yazma​


Aşağıdaki örnek, programın çalıştığı klasörde sonuc.txt adlı dosyayı oluşturur veya varsa içeriğini yeniler:

C++:
#include <fstream>
#include <iostream>

int main() {
    std::ofstream dosya("sonuc.txt");

    if (!dosya.is_open()) {
        std::cerr << "Dosya yazmak için açılamadı.\n";
        return 1;
    }

    dosya << "Birinci satır\n";
    dosya << "İkinci satır\n";
    dosya << "Sonuç: " << 42 << '\n';

    return 0;
}

Programı derleyip çalıştırdığınızda sonuc.txt dosyası oluşur. Dosyanın içinde üç satır bulunması beklenir. std::ofstream nesnesi main işlevinin sonunda kapsam dışına çıktığında dosyayı kapatır ve yazma işleminin tamamlanması için gerekli kaynakları serbest bırakır. Bu nedenle basit örneklerde ayrıca close() çağırmanız gerekmez.

Dosyanın oluşmaması veya yazılamaması, çoğunlukla programın yazma yetkisinin olmadığı bir klasör kullanıldığını, dosya yolunun hatalı olduğunu ya da dosyanın başka bir işlem tarafından engellendiğini gösterir. is_open() kontrolü yalnızca dosyanın açılıp açılmadığını gösterir; içeriğin istediğiniz biçimde yazıldığını tek başına kanıtlamaz. Program sonlandıktan sonra dosyayı açıp satırları kontrol edin.

Mevcut dosyanın sonuna yazma​


Dosyada bulunan metni silmeden yeni bilgiyi sona eklemek için dosyayı std::ios::app kipiyle açın:

C++:
#include <fstream>
#include <iostream>

int main() {
    std::ofstream dosya("kayit.txt", std::ios::app);

    if (!dosya) {
        std::cerr << "Dosya açılamadı.\n";
        return 1;
    }

    dosya << "Yeni kayıt eklendi\n";
    return 0;
}

Bu program her çalıştırıldığında kayit.txt dosyasının sonuna yeni bir satır ekler. Dosya yoksa oluşturulur. Önceki içeriğin üzerine yazmak istiyorsanız std::ios::app kullanmayın; yalnızca std::ofstream dosya("kayit.txt"); biçiminde açın.
Açma biçimiDosya varsaDosya yoksa
std::ofstream dosya("veri.txt")Mevcut içerik silinir ve yeni yazı baştan yazılır.Dosya oluşturulur.
std::ofstream dosya("veri.txt", std::ios::app)Yeni yazı dosyanın sonuna eklenir.Dosya oluşturulur.
Hangi açma biçiminin doğru olduğu, dosyanın kullanım amacına bağlıdır. Bir raporu her çalıştırmada yeniden üretmek istiyorsanız varsayılan biçimi; günlük, işlem kaydı veya geçmiş listesi tutuyorsanız std::ios::app kipini seçin.

Değişkenleri ve biçimli verileri yazma​


Dosyaya yalnızca sabit metin değil, değişkenlerin değerlerini de yazabilirsiniz. << işleci metin, tam sayı, ondalık sayı ve benzeri temel türleri sırayla dosyaya aktarır:

C++:
#include <fstream>
#include <string>

int main() {
    std::string kullanici = "Ayşe";
    int puan = 87;
    double ortalama = 91.5;

    std::ofstream dosya("rapor.txt");

    if (!dosya) {
        return 1;
    }

    dosya << "Kullanıcı: " << kullanici << '\n';
    dosya << "Puan: " << puan << '\n';
    dosya << "Ortalama: " << ortalama << '\n';
}

Bu örnekte rapor.txt dosyasına değişkenlerin o anda sahip olduğu değerler yazılır. Dosyaya yazmak, değişkenin kendisini kalıcı ve otomatik olarak saklamaz; yalnızca o anki değerinin metin biçimindeki gösterimini kaydeder. Programın daha sonra bu veriyi tekrar kullanması gerekiyorsa dosyayı ayrıca std::ifstream ile okumalı ve metni uygun türlere dönüştürmelidir.

Dosya yolunu doğru vermek​


Göreli bir yol, örneğin "sonuc.txt", dosyanın kaynak kodunun bulunduğu klasörü değil, programın çalıştırıldığı çalışma klasörünü temel alır. Bu nedenle dosyayı göremiyorsanız önce programın hangi klasörden çalıştırıldığını kontrol edin.

Alt klasöre yazacaksanız klasörün önceden var olması gerekir:

C++:
std::ofstream dosya("cikti/sonuc.txt");

cikti klasörü yoksa ofstream bu klasörü kendiliğinden oluşturmaz ve dosya açılamaz. Klasörü program içinde oluşturmak için C++17 veya daha yeni bir standart kullanıyorsanız <filesystem> tercih edilebilir:

C++:
#include <filesystem>
#include <fstream>

int main() {
    std::filesystem::create_directories("cikti");

    std::ofstream dosya("cikti/sonuc.txt");
    if (!dosya) {
        return 1;
    }

    dosya << "Dosya oluşturuldu\n";
}

Burada klasör oluşturma başarısız olursa veya yazma izni yoksa dosya yine açılamaz. Bu nedenle dosyayı açtıktan sonra if (!dosya) kontrolünü kaldırmayın.

Yazma hatasını işlem sırasında kontrol etme​


Dosya açılmış olsa bile yazma sırasında disk dolması veya başka bir işletim sistemi hatası meydana gelebilir. Kritik veriler yazıyorsanız yazma işleminden sonra akışın durumunu da kontrol edin:

C++:
#include <fstream>
#include <iostream>

int main() {
    std::ofstream dosya("onemli-veri.txt");

    if (!dosya) {
        std::cerr << "Dosya açılamadı.\n";
        return 1;
    }

    dosya << "Kaydedilecek bilgi\n";

    if (!dosya) {
        std::cerr << "Yazma sırasında hata oluştu.\n";
        return 1;
    }

    return 0;
}

İlk kontrol dosyanın açılmasını, ikinci kontrol ise yazma akışının hata durumuna geçip geçmediğini denetler. Başarılı açma ve yazma, dosyanın uygulamanızın beklediği özel bir biçimde saklandığını garanti etmez; örneğin CSV, JSON veya ikili dosya biçimi gerekiyorsa ayraçları, kodlamayı ve biçim kurallarını ayrıca uygulamanız gerekir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic