gpt4 book ai didi

c++ - 在 C++ 中写入/读取文件

转载 作者:行者123 更新时间:2023-11-28 00:29:45 24 4
gpt4 key购买 nike

我创建了一个简单的程序,它将一个对象写入文件,然后读回写入文件的内容。我的问题是当我写入文件时不需要的值被写入文件,当我检索数据时,这些值也被检索,这是我不想要的。

这是我所做的:

文件处理实现

//File Handling class Implementation
File::File(){}

string File::writeObject(Person obj)
{
ofstream outFile("myFile.txt", ios::out);

if( !outFile ) {
cout << "No File" << endl;
}

outFile.write( reinterpret_cast<const char *> (&obj), sizeof(obj) );
return "Done";
}

人.H:

//Person.H
class Person {
private: string name;
public: Person();
public: void setName(string name);
public: string getName();
};

主要实现: 使用命名空间标准;

int main( int argc, char* argv[] )
{
Person p1;
p1.setName("Shehan");

File f1;

cout << f1.writeObject(p1) << endl; //writes to the file

ifstream readFile("myfile.txt",ios::in); creates object to read from file

string name; // creates variable to hold the value
readFile >> name; reads from file

cout << name << endl; //prints the value
system("pause");

return 0;
}

我认为应该只将“shehan”写入文件,但写入文件的内容是:

0ÂÒ Shehan ÌÌÌÌÌ'þ¨

当我再次阅读时:

enter image description here

这里似乎有什么问题?

最佳答案

这里发生的事情是您没有格式化输出。所有输出都必须以某种方式格式化,以确保你可以重读它;只是从内存中复制位模式没用。

处理这个问题的通常方法是定义一个运算符 << (和一个运算符 >> ,以便阅读)为你的类(class)。该运算符将输出类,带有适当的分隔符,以便您可以确定当你阅读时,一个结束,另一个开始。如果,对于例如,我们举一个简单的例子:

class Person
{
std::string name;
int age;
public:
// ...
friend std::ostream& operator<<( std::ostream& dest, Person const& obj )
{
dest << '"' << name << '"' << age;
return dest;
}

friend std::istream& operator>>( std::istream& source, Person& obj )
{
char ch;
source >> ch;
if ( ch != '"' ) {
source.setstate( std::ios_base::failbit );
}
std::string name;
while ( source.get( ch ) && ch != '"' ) {
name += ch;
}
if ( ch != '"' ) {
source.setstate( std::ios_base::failbit );
}
int age;
source >> age;
if ( source ) {
obj = Person( name, age );
}
return source;
}
};

您会注意到输入比输出要困难得多。输出时,你知道你得到了什么(因为 C++类型系统,以及您自己对类不变量的验证)。输入时,你永远不知道用户要输入什么你,所以你必须检查所有的可能性。 (你可能,例如,想要禁止其他字符,例如一个'\n'在名字里。只需将它们添加到测试中 while .)

关于c++ - 在 C++ 中写入/读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com