为什么我无法从文件中读取对象?
Why I fail to read object from a file?
我想将字符串对象输出到文件并将其取回,但我的代码根本不打印任何内容。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void main()
{
// open file for binary input/output
fstream binary("data.txt", ios::binary);
// create random string
string str1 = "fgh";
// write down string object to the file
binary.write(reinterpret_cast<char*>(&str1), sizeof(str1));
// create second string
string str2;
// get str1 to str2
binary.read(reinterpret_cast<char*>(&str2), sizeof(str1));
// print second string
cout << str2;
}
我认为下面编写的代码是不言自明的。
您不需要(也不应该使用)二进制文件来存储 std::string
。将它们存储在由分隔符分隔的文本文件中。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() { // void main doesn't work on C++
// open file for binary input/output
fstream file("data.txt", ios::in | ios::out); // .txt file is not a binary file dude
// check if file already exists or not
// file will not be automatically created because ios::in mode is also being used
if (not file) {
cerr << "No such file present!" << endl;
return -1;
}
// create random string
string str1 = "fgh";
// write down string object to the file
// binary.write(reinterpret_cast<char*>(&str1), sizeof(str1));
file << str1 << endl; // if you are removing std::endl from here then add std::flush
// set get pointer at beginning because write operation has moved it to end
// it is always better to use two file objects (one ifstream and one ofstream) for such projects.
file.seekg(ios::beg);
// create second string
string str2;
// get str1 to str2
// binary.read(reinterpret_cast<char*>(&str2), sizeof(str1));
file >> str2;
// print second string
cout << str2;
return 0;
}
我想将字符串对象输出到文件并将其取回,但我的代码根本不打印任何内容。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void main()
{
// open file for binary input/output
fstream binary("data.txt", ios::binary);
// create random string
string str1 = "fgh";
// write down string object to the file
binary.write(reinterpret_cast<char*>(&str1), sizeof(str1));
// create second string
string str2;
// get str1 to str2
binary.read(reinterpret_cast<char*>(&str2), sizeof(str1));
// print second string
cout << str2;
}
我认为下面编写的代码是不言自明的。
您不需要(也不应该使用)二进制文件来存储 std::string
。将它们存储在由分隔符分隔的文本文件中。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() { // void main doesn't work on C++
// open file for binary input/output
fstream file("data.txt", ios::in | ios::out); // .txt file is not a binary file dude
// check if file already exists or not
// file will not be automatically created because ios::in mode is also being used
if (not file) {
cerr << "No such file present!" << endl;
return -1;
}
// create random string
string str1 = "fgh";
// write down string object to the file
// binary.write(reinterpret_cast<char*>(&str1), sizeof(str1));
file << str1 << endl; // if you are removing std::endl from here then add std::flush
// set get pointer at beginning because write operation has moved it to end
// it is always better to use two file objects (one ifstream and one ofstream) for such projects.
file.seekg(ios::beg);
// create second string
string str2;
// get str1 to str2
// binary.read(reinterpret_cast<char*>(&str2), sizeof(str1));
file >> str2;
// print second string
cout << str2;
return 0;
}