Std :: string dosyaya nasıl yazılır?


89

std::stringKullanıcıdan kabul ettiğim bir değişkeni bir dosyaya yazmak istiyorum . write()Yöntemi kullanmayı denedim ve dosyaya yazıyor. Ama dosyayı açtığımda dize yerine kutular görüyorum.

Dize yalnızca değişken uzunluklu tek bir kelimedir. Bunun std::stringiçin uygun mu yoksa bir karakter dizisi falan mı kullanmalıyım.

ofstream write;
std::string studentName, roll, studentPassword, filename;


public:

void studentRegister()
{
    cout<<"Enter roll number"<<endl;
    cin>>roll;
    cout<<"Enter your name"<<endl;
    cin>>studentName;
    cout<<"Enter password"<<endl;
    cin>>studentPassword;


    filename = roll + ".txt";
    write.open(filename.c_str(), ios::out | ios::binary);

    write.put(ch);
    write.seekp(3, ios::beg);

    write.write((char *)&studentPassword, sizeof(std::string));
    write.close();`
}

3
Lütfen kodunuzu gösterin. Genel olarak, eğer doğru kullanılırsa, std::stringbunun için iyidir.
Yararsız

2
Dize nesnesini değil, dizenin 'yük' İÇERİĞİNİ kaydetmeniz gerekir (tipik olarak yalnızca bir uzunluk ve gerçek içeriğe bir işaretçi içerir)
Mats Petersson

Yanıtlar:


124

Şu anda string-object içindeki ikili veriyi dosyanıza yazıyorsunuz. Bu ikili veri muhtemelen sadece gerçek verilere bir gösterici ve dizgenin uzunluğunu temsil eden bir tamsayı içerecektir.

Bir metin dosyasına yazmak istiyorsanız, bunu yapmanın en iyi yolu muhtemelen ofstreambir "dosya dışı akış" kullanmaktır. Aynı şekilde davranır std::cout, ancak çıktı bir dosyaya yazılır.

Aşağıdaki örnek, stdin'den bir dizeyi okur ve ardından bu dizeyi dosyaya yazar output.txt.

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

int main()
{
    std::string input;
    std::cin >> input;
    std::ofstream out("output.txt");
    out << input;
    out.close();
    return 0;
}

Bunun out.close()burada kesinlikle gerekli olmadığına dikkat edin: Yapısızlaştırıcı , kapsam dışına çıkar ofstreamçıkmaz bunu bizim için halledebilir out.

Daha fazla bilgi için bkz. C ++ - referansı: http://cplusplus.com/reference/fstream/ofstream/ofstream/

Şimdi bir dosyaya ikili biçimde yazmanız gerekiyorsa, bunu dizedeki gerçek verileri kullanarak yapmalısınız. Bu verileri elde etmenin en kolay yolu kullanmaktır string::c_str(). Böylece şunları kullanabilirsiniz:

write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );

4
Bunun yeni satır karakterleriyle sorun
yaşamaması

21

std::ofstreamDosyaya yazmak için bir kullandığınızı varsayarsak , aşağıdaki kod parçası bir std::stringdosyaya insan tarafından okunabilir biçimde yazacaktır :

std::ofstream file("filename");
std::string my_string = "Hello text in file\n";
file << my_string;

0

kaldırmak ios::binaryiçin ofstream içinde mod arasından ve kullanmak studentPassword.c_str()yerine (char *)&studentPasswordde seninwrite.write()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.