2013-04-29 18 views
6

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

5

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.

İlgili konular