Merak etmeye başladım - aslında std::ios::in
ve std::ios::out
'un aslında çalışması gereken std::fstream
nasıl? Ne yapmalı? Boş bir dosyaya (örneğin) bir şeyler yaz, sonra oku ... ne? Sadece yazılı değer? "İşaretçi"/"İmleç" dosyası nerede olur? Belki de cevaplar zaten oradaydı ama onu bulamadım.std :: fstream'in hem içeride hem de dışarıda çalışması gerekiyor?
cevap
std::fstream
nedir?
std::fstream
iki yönlü bir dosya akışı sınıfıdır. Yani, dosyalar için hem girdi hem de çıktı için bir arayüz sağlar. Bir kullanıcının aynı harici diziden okuması ve yazması gerektiğinde yaygın olarak kullanılır.
(std::ofstream
veya std::ifstream
aksine) iki yönlü bir dosya akışı başlatmasını, openmodes ios_base::in
ve ios_base::out
varsayılan tarafından belirtilir.
std::fstream f("test.txt", std::ios_base::in | std::ios_base::out);
onlar da bazı varsayılan olmayan openmodes eklemek gerekirse her iki seçeneği belirtmek istiyorum
std::fstream f("test.txt");
biri aynıdır böyle trunc
, ate
, app
veya binary
olarak: Bu, bu demektir. çift yönlü I/O için yeni bir dosya oluşturmayı düşünüyorsanız ios_base::trunc
openmode gereklidir, çünkü ios_base::in
openmode yeni bir dosyanın oluşturulmasını devre dışı bırakır.
çift yönlü I/O
çift yönlü I/O girişi hem de çıktı için bir çift yönlü akımı kullanılmasıdır. IOStreams'de, standart akışlar, karakter dizilerini, bir kaynak olarak veya bir veri kaynağı olarak yer aldığı bir tamponda tutmaktadır. Çıkış akışları için bir "koyma" alanı (çıktı için karakterleri tutan tampon) var. Aynı şekilde, giriş akışları için "get" alanı vardır. std::fstream
durumunda
(her ikisi de giriş ve çıkış için bir sınıfı), her iki get temsil eden bir ortak bir dosya tamponu tutan ve sırasıyla alan koydu. Dosyadaki mevcut konumu işaret eden konum göstergesi, hem giriş hem de çıkış işlemlerinden etkilenir.
- Bir yazma veya tersi sonra okuma gerçekleştirmek, dere geri yerleştirilmesi gerekir: Bunun gibi, sırayla iki yönlü akışta doğru I/O'yu gerçekleştirmek için, izlemeniz gereken bazı kurallar vardır.
- Bir giriş işlemi, dosya sonuna isabet ederse, daha sonra doğrudan bir yazma işlemi gerçekleştirilir.
Bu yalnızca std::fstream
anlamına gelir. Yukarıdaki kurallar std::stringstream
için gerekli değildir.
Umarım bunlar sorularınızı cevaplar. Daha fazla varsa, sadece yorumlarda isteyebilirsiniz.