[英]writing into binary files
#include <iostream>
#include <fstream>
using namespace std;
class info {
private:
char name[15];
char surname[15];
int age;
public:
void input(){
cout<<"Your name:"<<endl;
cin.getline(name,15);
cout<<"Your surname:"<<endl;
cin.getline(surname,15);
cout<<"Your age:"<<endl;
cin>>age;
to_file(name,surname,age);
}
void to_file(char name[15], char surname[15], int age){
fstream File ("example.bin", ios::out | ios::binary | ios::app);
// I doesn't know how to fill all variables(name,surname,age) in 1 variable (memblock)
//example File.write ( memory_block, size );
File.close();
}
};
int main(){
info ob;
ob.input();
return 0;
}
I don't know how to write more than 1 variable into a file, please help, I included an example ;) Maybe there are better ways to write to a file, please help me with this, it's to hard for me to solve. 我不知道如何将1个以上的变量写入文件,请帮助,我包含了一个例子;)也许有更好的方法来写一个文件,请帮我这个,这对我来说很难解决。
For a text file, you could easily output one variable per line using a similar <<
to the one you use with std::cout
. 对于文本文件,您可以使用类似<<
到与std::cout
一起使用的<<
。
For a binary file, you need to use std::ostream::write()
, which writes a sequence of bytes. 对于二进制文件,您需要使用std::ostream::write()
,它写入一个字节序列。 For your age
attribute, you'll need to reinterpret_cast
this to const char*
and write as many bytes as is necessary to hold an int
for your machine architecture. 对于你的age
属性,你需要将它reinterpret_cast
为const char*
并写入为你的机器架构保存int
所需的字节数。 Note that if you intend to read this binary date on a different machine, you'll have to take word size and endianness into consideration. 请注意,如果您打算在另一台计算机上读取此二进制日期,则必须考虑字大小和字节顺序 。 I also recommend that you zero the name
and surname
buffers before you use them lest you end up with artefacts of uninitialised memory in your binary file. 我还建议您在使用name
和surname
缓冲区之前将其归零,以免最终在二进制文件中出现未初始化内存的伪影。
Also, there's no need to pass attributes of the class into the to_file()
method. 此外,不需要将类的属性传递给to_file()
方法。
#include <cstring>
#include <fstream>
#include <iostream>
class info
{
private:
char name[15];
char surname[15];
int age;
public:
info()
:name()
,surname()
,age(0)
{
memset(name, 0, sizeof name);
memset(surname, 0, sizeof surname);
}
void input()
{
std::cout << "Your name:" << std::endl;
std::cin.getline(name, 15);
std::cout << "Your surname:" << std::endl;
std::cin.getline(surname, 15);
std::cout << "Your age:" << std::endl;
std::cin >> age;
to_file();
}
void to_file()
{
std::ofstream fs("example.bin", std::ios::out | std::ios::binary | std::ios::app);
fs.write(name, sizeof name);
fs.write(surname, sizeof surname);
fs.write(reinterpret_cast<const char*>(&age), sizeof age);
fs.close();
}
};
int main()
{
info ob;
ob.input();
}
A sample data file may look like this: 示例数据文件可能如下所示:
% xxd example.bin
0000000: 7573 6572 0000 0000 0000 0000 0000 0031 user...........1
0000010: 3036 3938 3734 0000 0000 0000 0000 2f00 069874......../.
0000020: 0000 ..
File.write(name, 15);
File.write(surname, 15);
File.write((char *) &age, sizeof(age));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.