122 votes

Comment écrire std::string dans un fichier ?

Je veux écrire un std::string que j'accepte de la part de l'utilisateur vers un fichier. J'ai essayé d'utiliser la fonction write() et il écrit dans le fichier. Mais lorsque j'ouvre le fichier, je vois des boîtes à la place de la chaîne.

La chaîne n'est qu'un mot unique de longueur variable. Est std::string pour cela ou dois-je utiliser un tableau de caractères ou autre ?

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();`
}

176voto

JSQuareD Points 1240

Vous écrivez actuellement les données binaires dans le fichier string -dans votre dossier. Ces données binaires ne seront probablement constituées que d'un pointeur vers les données réelles et d'un nombre entier représentant la longueur de la chaîne.

Si vous souhaitez écrire dans un fichier texte, la meilleure façon de le faire est probablement d'utiliser un fichier de type ofstream un "out-file-stream". Il se comporte exactement comme std::cout mais la sortie est écrite dans un fichier.

L'exemple suivant lit une chaîne de caractères depuis stdin, puis écrit cette chaîne dans le fichier 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;
}

Notez que out.close() n'est pas strictement nécessaire ici : le déconstructeur de ofstream peut s'en occuper pour nous dès que out sort du champ d'application.

Pour plus d'informations, voir la référence C++ : http://cplusplus.com/reference/fstream/ofstream/ofstream/

Maintenant, si vous devez écrire dans un fichier sous forme binaire, vous devez le faire en utilisant les données réelles de la chaîne. La façon la plus simple d'acquérir ces données est d'utiliser la commande string::c_str() . Donc vous pourriez utiliser :

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

34voto

stefan Points 4987

En supposant que vous utilisez un std::ofstream pour écrire dans un fichier, l'extrait suivant écrira un fichier std::string au dossier sous une forme lisible par l'homme :

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

0voto

Tolini Points 1

Retirer le ios::binary de vos modes dans votre ofstream et utilisez studentPassword.c_str() au lieu de (char *)&studentPassword dans votre write.write()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X