C++, ikili verileri yazmak için ikili dosyalarla, özellikle de 'ofstream' sınıfıyla etkileşim kurmak için
C++ Kullanarak İkili Dosya Yazma
Verileri C++ kullanarak ikili bir dosyaya kaydetmek için write() yöntemi kullanılır. Bu işlev, 'put' işaretçisinin konumundan başlayarak belirlenen akışa belirli sayıda bayt yazar. Eğer “put” işaretçisi sonda ise dosya genişletilir. Ancak işaretçi dosyanın içindeyse yeni veriler mevcut karakterlerin üzerine yazar. Yazma işlemi sırasında bir hata olması durumunda akış, hata durumunda olarak işaretlenir. Şimdi bazı basit ve yerleşik C++ fonksiyonlarını kullanarak ikili dosyaya nasıl yazılacağını öğrenmek için örneklere geçelim.
Yöntem 1: Yapılandırılmış Verilerle İkili Dosyalar Yazma
Birçok durumda, özel yapılar gibi yapılandırılmış verileri ikili dosyaya yazmanız gerekebilir. Bir kişinin adını, boyunu ve yaşını içeren bir kaydı içeren bir örneği ele alalım. Aşağıdaki verilen koda bakın ve açıklamaya bir göz atın:
#include
#include
yapı Kişi {
karakter isim [ elli ] ;
int yaş ;
çift yükseklik ;
} ;
int ana ( ) {
std :: akış çıkışDosyası ( 'insanlar.bin' , std :: ios :: ikili ) ;
eğer ( ! outDosya. açık ( ) ) {
std :: kesin << 'Hata! Dosya yazmak için açılamıyor!' << std :: sonunda ;
geri dönmek 1 ;
}
Kişi kişi1 = { 'Kalsom İlyas' , 25 , 1.75 } ;
Kişi kişi2 = { 'Kalsoom Bajwa' , 30 , 1.68 } ;
outDosya. yazmak ( yeniden yorumlama_cast < karakter *> ( & kişi 1 ) , boyutu ( kişi 1 ) ) ;
outDosya. yazmak ( yeniden yorumlama_cast < karakter *> ( & kişi2 ) , boyutu ( kişi2 ) ) ;
outDosya. kapalı ( ) ;
std :: cout << 'Kişinin kaydı başarıyla ikili dosyaya yazıldı.' << std :: sonunda ;
geri dönmek 0 ;
}
Burada belirli ayrıntılarla birlikte kodun bir dökümü verilmiştir. Program “Kişi” adında özel bir yapının tanımlanmasıyla başlar. Üç alanı vardır: ad, yaş ve boy. Bu alanların detayları aşağıdaki gibidir:
- isim: Kişinin adını saklayacak bir dize (en fazla 50 karakter)
- yaş: Kişinin yaşını saklayacak bir tam sayı
- yükseklik: Kişinin boyunu saklamak için bir çift
“Person” yapısını tanımladıktan sonra programın giriş noktası olan ana fonksiyona geçilir. Ana programın ilk satırında “people.bin” isimli bir dosya açılır. Verileri ikili formatta yazmak için “people.bin” adında bir dosya oluşturmak için “std::ofstream” kullanıyoruz. Dosyanın başarıyla açılıp açılmadığını kontrol etmek çok önemlidir. Aksi halde bir hata mesajı görüntülenir ve program durur. Dolayısıyla “if” koşulu ve is_open() fonksiyonu yardımıyla dosyanın başarıyla açılıp açılmadığını kontrol ediyoruz.
Burada iki “Kişi” nesnesi yaratılır. “Kişi” tipinde “kişi1” ve “kişi2” olmak üzere iki değişken tanımlıyoruz. “Kalsoom Ilyas” ve “Kalsoom Bajwa” değişkenlerine isim, yaş ve boy değerlerini atadık.
Artık ikili dosyaya yazılacak veriye sahip olduğumuza göre, write() işleviyle asıl işlevi gerçekleştirelim. Her “Person” nesnesinin içeriğini dosyaya yazmak için “outFile.write” kullanıyoruz. “reinterpret_cast
Verileri dosyaya yazdıktan sonra, başka bir işlevden dolayı hiçbir verinin kaybolmaması için düzgün bir şekilde kapatılması çok önemlidir. Dosyayla ilişkili kaynakları serbest bırakmak ve verilerin doğru yazıldığından emin olmak için outFile.close() yöntemini kullanıyoruz. Son olarak verinin ikili dosyaya başarıyla yazıldığını onaylayan bir mesaj yazdırıyoruz.
Bu örneği daha basit bir şekilde açıklarsak, sadece insanlara ait bilgileri gizli bir dilde saklayabilen özel bir not defteri hayal edin. Bu kod, bilgileri (isim, yaş, boy) düzenlemek için bir plan oluşturur. Defteri açıyor, iki kişinin profillerini dolduruyor, bilgileri gizli dile çeviriyor ve içine düzgünce yazıyor. Daha sonra dizüstü bilgisayarı güvenli bir şekilde kapatarak profilleri gelecekte kullanmak üzere saklar. Aşağıdaki anlık görüntüde verilen programın çıktısına bakın:
Yöntem 2: Tam Sayıları İkili Dosyaya Yazma
Bu yöntemde tamsayılardan oluşan bir dizi “integers.bin” isimli ikili dosyaya yazılır. “reinterpret_cast
#include
int ana ( ) {
std :: akış çıkışDosyası ( 'tamsayılar.bin' , std :: ios :: ikili ) ;
eğer ( ! outDosya. açık ( ) ) {
std :: kesin << 'Hata! Dosya yazmak için açılamıyor!' << std :: sonunda ;
geri dönmek 1 ;
}
int sayılar [ ] = { 42 , 99 , - 1 , 0 } ;
outDosya. yazmak ( yeniden yorumlama_cast < karakter *> ( sayılar ) , boyutu ( sayılar ) ) ;
outDosya. kapalı ( ) ;
std :: cout << 'Verilen tamsayılar ikili dosyaya başarıyla yazıldı.' << std :: sonunda ;
geri dönmek 0 ;
}
Kodun belirli ayrıntılarla birlikte bir dökümü:
“#include
Sonraki satır ise “int sayılar[] = {42, 99, -1, 0};” 42, 99, -1 ve 0 tam sayılarını içeren “numbers” adlı bir diziyi tanımlar. “outFile.write(reinterpret_cast
Çözüm
C++'da ikili dosyalar yazmak, çeşitli veri türlerini verimli bir şekilde işlemek için çok önemli bir beceridir. C++'da ikili dosya yazma konusundaki bu araştırmamızda, ikili verileri verimli bir şekilde işlemek için 'ofstream' sınıfının nasıl kullanılabileceğini öğrendik. İster basit tamsayılarla ister özel yapılar kullanan yapılandırılmış verilerle ilgilenin, süreç bir dosya akışının açılmasını, verilerin ikili formatta yazılmasını ve ardından dosyanın kapatılmasını içerir. Bu yetenek, C++ geliştiricilerine çok çeşitli ikili veri türleriyle çalışma esnekliği sağlar ve sistem düzeyinde programlamadan multimedya işlemeye kadar çeşitli uygulamalarda dilin çok yönlülüğüne katkıda bulunur.