0Pricing
C++ Academy · Ders

İkili Dosya G/Ç

Ham baytları okuyun ve yazın

İkili Dosya G/Ç, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Metin ve ikili kip karşılaştırması

Metin kipi, insanların okuyabileceği karakterleri yazar; ikili kip, nesnelerin bellekteki ham baytlarını tam olarak oldukları biçimde yazar. std::ios::binary ile açın.

#include <iostream>
#include <fstream>

int main() {
    int value = 12345;
    std::ofstream out("v.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(&value), sizeof(value));
    std::cout << "wrote " << sizeof(value) << " bytes\n";
    return 0;
}

write baytları alır

write(ptr, n), ptr konumundan n ham baytı çıktılar. Nesne adresini const char* türüne dönüştürürsünüz.

#include <iostream>
#include <fstream>

int main() {
    double d = 3.14;
    std::ofstream out("d.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(&d), sizeof(d));
    out.close();
    std::cout << "saved a double\n";
    return 0;
}

read baytları geri yükler

read(ptr, n), ptr konumundaki nesneye n bayt yükleyerek ikili yazma işlemini tersine çevirir.

#include <iostream>
#include <fstream>

int main() {
    int original = 777;
    std::ofstream("i.bin", std::ios::binary).write(reinterpret_cast<const char*>(&original), sizeof(original));
    int loaded = 0;
    std::ifstream in("i.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));
    std::cout << loaded << '\n';
    return 0;
}

POD yapısı yazma

Yalın veri yapıları (işaretçi içermeyen, sabit boyutlu üyelere sahip yapılar), tek bir bayt bloğu olarak dışa aktarılıp yeniden yüklenebilir.

#include <iostream>
#include <fstream>

struct Record { int id; double balance; };

int main() {
    Record r{1, 99.5};
    std::ofstream out("rec.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(&r), sizeof(r));
    std::cout << "struct saved\n";
    return 0;
}

Yapıyı geri okuma

Okuma işlemi, yapının tamamını tek bir read çağrısıyla geri yükler.

#include <iostream>
#include <fstream>

struct Record { int id; double balance; };

int main() {
    Record w{42, 250.0};
    std::ofstream("r2.bin", std::ios::binary).write(reinterpret_cast<const char*>(&w), sizeof(w));
    Record r{};
    std::ifstream in("r2.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(&r), sizeof(r));
    std::cout << r.id << ' ' << r.balance << '\n';
    return 0;
}

Dizi yazma

Toplam bayt boyutunu aktararak bir dizinin tamamını tek çağrıda yazabilirsiniz.

#include <iostream>
#include <fstream>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    std::ofstream out("arr.bin", std::ios::binary);
    out.write(reinterpret_cast<const char*>(arr), sizeof(arr));
    std::cout << "wrote " << sizeof(arr) << " bytes\n";
    return 0;
}

Diziyi geri okuma

Aynı sayıda baytı aynı boyuttaki bir diziye okuyun.

#include <iostream>
#include <fstream>

int main() {
    int src[5] = {10, 20, 30, 40, 50};
    std::ofstream("a2.bin", std::ios::binary).write(reinterpret_cast<const char*>(src), sizeof(src));
    int dst[5] = {};
    std::ifstream in("a2.bin", std::ios::binary);
    in.read(reinterpret_cast<char*>(dst), sizeof(dst));
    for (int x : dst) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Konumlara gitme

seekg (get) ve seekp (put), okuma/yazma konumunu değiştirerek dosyada rastgele erişim sağlar.

#include <iostream>
#include <fstream>

int main() {
    int data[3] = {100, 200, 300};
    std::ofstream("seek.bin", std::ios::binary).write(reinterpret_cast<const char*>(data), sizeof(data));
    std::ifstream in("seek.bin", std::ios::binary);
    in.seekg(sizeof(int)); // skip to second int
    int second; in.read(reinterpret_cast<char*>(&second), sizeof(second));
    std::cout << second << '\n';
    return 0;
}

Konumu öğrenme

tellg ve tellp geçerli konumu bildirir; bu bilgiler dosya boyutunu veya uzaklıkları ölçmek için kullanışlıdır.

#include <iostream>
#include <fstream>

int main() {
    int data[4] = {1, 2, 3, 4};
    std::ofstream("tell.bin", std::ios::binary).write(reinterpret_cast<const char*>(data), sizeof(data));
    std::ifstream in("tell.bin", std::ios::binary);
    in.seekg(0, std::ios::end);
    std::cout << "file size: " << in.tellg() << " bytes\n";
    return 0;
}

Neden işaretçiler kullanılmamalı

İşaretçi veya std::string içeren nesneleri hiçbir zaman ikili olarak dışa aktarmayın: işaretçinin gösterdiği veriyi değil, işaretçi adresini kaydetmiş olursunuz. Bunun yerine içeriği serileştirin.

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::string s = "hello";
    std::ofstream out("str.bin", std::ios::binary);
    std::size_t len = s.size();
    out.write(reinterpret_cast<const char*>(&len), sizeof(len));
    out.write(s.data(), len); // write the chars, not the object
    std::cout << "serialized " << len << " chars\n";
    return 0;
}

Taşınabilirlik uyarıları

İkili yerleşimler bayt sıralamasına ve tür boyutlarına bağlıdır. Bir platformda yazılan dosyalar başka bir platformda doğru okunmayabilir; bu nedenle paylaşım için sabit bir biçim tanımlayın.

#include <iostream>
#include <cstdint>

int main() {
    std::int32_t fixed = 1; // fixed-width type for portability
    std::cout << "sizeof int32_t = " << sizeof(fixed) << '\n';
    return 0;
}

Hızlı Kontrol

İkili G/Ç konusundaki anlayışınızı sınayın.

Özet

İkili dosya G/Ç işlemlerini öğrendiniz:

  • std::ios::binary ile açın; reinterpret_cast<char*> ile write/read kullanın
  • seekg/seekp ve tellg/tellp rastgele erişim sağlar
  • işaretçileri veya dizeleri doğrudan hiçbir zaman dışa aktarmayın; içeriklerini serileştirin ve bayt sıralamasına dikkat edin

Sırada akış durumunu denetlemeyi ve hataları ele almayı öğreneceksiniz.

Sıkça Sorulan Sorular

“İkili Dosya G/Ç” dersi ücretsiz mi?

Evet — “İkili Dosya G/Ç” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“İkili Dosya G/Ç” dersinde ne öğreneceğim?

Ham baytları okuyun ve yazın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“İkili Dosya G/Ç” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ifstream ile Dosya Okuma
  2. ofstream ile Dosya Yazma
  3. İkili Dosya G/Ç
  4. Hata İşleme ve Durum
← C++ Academy Sayfasına Dön