Как записать std :: string в файл?

87

Я хочу записать std::stringпеременную, которую я принимаю от пользователя, в файл. Я пробовал использовать write()метод, и он записывает в файл. Но когда я открываю файл, я вижу прямоугольники вместо строки.

Строка представляет собой только одно слово переменной длины. Является ли std::stringподходит для этого , или я должен использовать массив символов или что - то.

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();`
}
Slashr
источник
3
Пожалуйста, покажите свой код. В общем, при правильном использовании std::stringдля этого подходит.
Useless
2
Вам необходимо сохранить СОДЕРЖАНИЕ строки, а не объект строки как таковой (который обычно содержит только длину и указатель на фактическое содержимое)
Матс Петерссон,

Ответы:

122

В настоящее время вы записываете двоичные данные в string-object в свой файл. Эти двоичные данные, вероятно, будут состоять только из указателя на фактические данные и целого числа, представляющего длину строки.

Если вы хотите записать в текстовый файл, лучший способ сделать это, вероятно, будет с ofstream, "out-file-stream". Он ведет себя точно так же std::cout, но вывод записывается в файл.

В следующем примере одна строка считывается из стандартного ввода, а затем записывается в файл 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;
}

Обратите внимание, что здесь out.close()это не обязательно: деконструктор ofstreamможет справиться с этим за нас, как только outвыйдет за рамки.

Для получения дополнительной информации см. C ++ - справку: http://cplusplus.com/reference/fstream/ofstream/ofstream/

Теперь, если вам нужно записать в файл в двоичной форме, вы должны сделать это, используя фактические данные в строке. Самый простой способ получить эти данные - использовать string::c_str(). Итак, вы можете использовать:

write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );
JSQuareD
источник
3
Мне пришлось добавить std :: ios :: binary, чтобы не было проблем с символами новой строки
Waddles
19

Предполагая, что вы используете a std::ofstreamдля записи в файл, следующий фрагмент кода запишет std::stringв файл в удобочитаемой форме:

std::ofstream file("filename");
std::string my_string = "Hello text in file\n";
file << my_string;
Стефан
источник
0

удалить ios::binaryиз ваших режимов в вашем ofstream и использовать studentPassword.c_str()вместо (char *)&studentPasswordв вашемwrite.write()

Толини
источник