|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 两手空空儿 于 2023-1-29 21:41 编辑
我的设想是用一个文件来存放员工的【人数】和【员工信息】,添加或者删除时再更新文件的内容,示例代码如下
- #include <iostream>
- #include <fstream>
- #include <string>
- #define FILE "save.txt"
- using namespace std;
- class Employee{
- public:
- //
- Employee(int num, string name, int age):m_number(num), m_name(name), m_age(age){
- }
- //
- //private:
- int m_number;
- string m_name;
- int m_age;
- };
- int main(void)
- {
- int cnt = 2; //员工的数量
- Employee emp[2] = {
- {11, "张三", 25},
- {12, "李四", 33}};
- //写入数据
- ofstream ofs(FILE, ios::out);
- ofs << cnt << endl;
- ofs << emp[0].m_number << " " << emp[0].m_name << " " << emp[0].m_age << endl;
- ofs << emp[1].m_number << " " << emp[1].m_name << " " << emp[1].m_age << endl;
- ofs.close();
-
- //增加数据,问题来了。。。。。。。。。。。。。。
- //单独写入cnt, 再往文件尾追加员工信息
- return 0;
- }
复制代码
在文件中,2(cnt)这个数字是以字符形式存放的,只占文件的1个位置, cnt = 10时,就会占两个位置
随着人数的增加,当cnt为两们数,叁位数,或者更多时,
ofs << cnt << endl; 这一句会覆盖第一位员工的数据,
怎么才能解决这个问题?难道只能每次更新数据的时候把所有数据读出来,再重新写入一次?
(用另外的文件单独存放cnt是可以的,但是我不想分开存放)
有没有一种方法,让文件的开头给cnt留出足够的位置,在这之后再写入员工数据
比如 cnt是 int类型,4个字节,就用4个位置用内存的形式放进去,
或者是其它什么方法
两手空空儿 发表于 2023-1-29 21:54
多放很多空格会不会影响后面数据的读取?
怎么在打开文件后直接定位到第一个员工的数据的开头呢?
是 ...
C++ 标准库的输出流可以用 std::setw 来设置位宽,自动填充空格
先输入数量时会自动跳过前缀空白字符,应该不会影响后续读取?
不过还是建议用二进制,二进制指的是用 std::basic_ostream<CharT,Traits>::write 或类似方法直接把这个变量的内存表示写进文件,这个长度(基本)是固定的,如果配合 uint32_t 之类的类型使用则可以保证其写入文件必然是 32 / CHAR_BIT 个(通常是 4 个)字节,通常也不需要做填充之类的操作
|
|