Chcę zapisać std::string
zmienną, którą akceptuję od użytkownika do pliku. Próbowałem użyć write()
metody i zapisuje do pliku. Ale kiedy otwieram plik, widzę pola zamiast ciągu.
Ciąg jest tylko pojedynczym słowem o zmiennej długości. Czy std::string
nadaje się do tego czy należy użyć tablicę znaków czy coś.
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();`
}
std::string
jest do tego w porządku.Odpowiedzi:
Obecnie zapisujesz dane binarne z
string
-obiektu do swojego pliku. Te dane binarne będą prawdopodobnie składać się tylko ze wskaźnika do rzeczywistych danych i liczby całkowitej reprezentującej długość ciągu.Jeśli chcesz pisać do pliku tekstowego, najlepszym sposobem na zrobienie tego byłby prawdopodobnie
ofstream
„strumień wyjściowy”. Zachowuje się dokładnie takstd::cout
, jak , ale dane wyjściowe są zapisywane do pliku.Poniższy przykład odczytuje jeden ciąg ze stdin, a następnie zapisuje ten ciąg w pliku
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; }
Zauważ, że
out.close()
nie jest to absolutnie konieczne: dekonstruktorofstream
może sobie z tym poradzić, gdy tylkoout
wyjdzie poza zakres.Więcej informacji można znaleźć w dokumentacji C ++: http://cplusplus.com/reference/fstream/ofstream/ofstream/
Teraz, jeśli chcesz zapisać do pliku w postaci binarnej, powinieneś to zrobić, używając rzeczywistych danych w ciągu. Najłatwiejszym sposobem uzyskania tych danych byłoby użycie
string::c_str()
. Możesz więc użyć:write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );
źródło
Zakładając, że używasz a
std::ofstream
do zapisu do pliku, poniższy fragment kodu zapiszestd::string
do pliku w postaci czytelnej dla człowieka:std::ofstream file("filename"); std::string my_string = "Hello text in file\n"; file << my_string;
źródło
usuń
ios::binary
ze swoich trybów w swoim ofstream i użyjstudentPassword.c_str()
zamiast(char *)&studentPassword
w swoimwrite.write()
źródło