在 C++ 中使用指针将对象写入文件
write an object to a file using pointer in c++
我有这个对象 ob,我正在使用指向该对象的指针将其写入文件。但是好像没有效果。
class A
{
public:
int Arr[10];
A();
};
A::A()
{
for(int i=0;i<10;i++)
Arr[i] = 0;
}
A obj;
int main(int argc, char *argv[])
{
A *ptr = &obj, temp;
obj.Arr[0] = 1;
fstream fp("temp", ios::in|ios::binary|ios::out);
fp.write((char *)ptr, sizeof(*ptr));
fp.close();
fp.open("temp", ios::in|ios::binary|ios::out);
fp.read((char *)&temp, sizeof(temp));
for(int i=0;i<10;i++)
cout<<temp.Arr[i]<<" ";
fp.close();
return 0;
}
输出:
0 0 0 0 0 0 0 0 0 0
预期输出:
1 0 0 0 0 0 0 0 0 0
如何使用指针直接写入对象。还有有什么方法可以直接读取指针本身的内容吗?
您两次打开文件进行阅读 (std::ios::in
)。打开文件读取时,文件必须存在,否则打开会失败,也就是说第一次打开不成功,所以文件没有创建。
第二次打开也会因为文件丢失而失败。
因此,请始终检查打开文件是否真的成功并使用正确的打开模式:
#include <fstream>
#include <iostream>
class A {
public:
int Arr[10]{};
void print() const {
for(int val : Arr) std::cout << val << ' ';
std::cout << '\n';
}
};
int main() {
A obj;
A temp;
obj.Arr[0] = 1;
// open file for writing and check that opening succeeded
if(std::ofstream fp("temp", std::ios::binary); fp) {
obj.print();
fp.write(reinterpret_cast<const char*>(&obj), sizeof(obj));
}
// open the file for reading and check that opening succeeded
if(std::ifstream fp("temp", std::ios::binary); fp) {
fp.read(reinterpret_cast<char*>(&temp), sizeof(temp));
temp.print();
}
}
我有这个对象 ob,我正在使用指向该对象的指针将其写入文件。但是好像没有效果。
class A
{
public:
int Arr[10];
A();
};
A::A()
{
for(int i=0;i<10;i++)
Arr[i] = 0;
}
A obj;
int main(int argc, char *argv[])
{
A *ptr = &obj, temp;
obj.Arr[0] = 1;
fstream fp("temp", ios::in|ios::binary|ios::out);
fp.write((char *)ptr, sizeof(*ptr));
fp.close();
fp.open("temp", ios::in|ios::binary|ios::out);
fp.read((char *)&temp, sizeof(temp));
for(int i=0;i<10;i++)
cout<<temp.Arr[i]<<" ";
fp.close();
return 0;
}
输出:
0 0 0 0 0 0 0 0 0 0
预期输出:
1 0 0 0 0 0 0 0 0 0
如何使用指针直接写入对象。还有有什么方法可以直接读取指针本身的内容吗?
您两次打开文件进行阅读 (std::ios::in
)。打开文件读取时,文件必须存在,否则打开会失败,也就是说第一次打开不成功,所以文件没有创建。
第二次打开也会因为文件丢失而失败。
因此,请始终检查打开文件是否真的成功并使用正确的打开模式:
#include <fstream>
#include <iostream>
class A {
public:
int Arr[10]{};
void print() const {
for(int val : Arr) std::cout << val << ' ';
std::cout << '\n';
}
};
int main() {
A obj;
A temp;
obj.Arr[0] = 1;
// open file for writing and check that opening succeeded
if(std::ofstream fp("temp", std::ios::binary); fp) {
obj.print();
fp.write(reinterpret_cast<const char*>(&obj), sizeof(obj));
}
// open the file for reading and check that opening succeeded
if(std::ifstream fp("temp", std::ios::binary); fp) {
fp.read(reinterpret_cast<char*>(&temp), sizeof(temp));
temp.print();
}
}