在处理二进制文件时了解 Seekg() 和 seekp()
Understanding Seekg() and seekp() when dealing with binary files
我是一名CS学生,我试图理解一段代码,但我无法理解它。这段代码允许用户修改二进制文件中的某个记录(结构(。我不明白records.seekg(recNum * sizeof(person), ios::beg); and records.seekp(recNum * sizeof(person), ios::beg);
.为什么使用结构大小的指针来表示数。任何帮助将不胜感激。
void modify()
{
int recNum;
displayAll();
fstream records("records.dat", ios::in | ios::out | ios::binary);
//get record number of the desired record.
cout << "Which record do you want to edit? ";
cin >> recNum;
recNum = recNum - 1;
records.seekg(recNum * sizeof(person), ios::beg);
records.read(reinterpret_cast<char *>(&person), sizeof(person));
cout << "ID Age " << " " << "Name" << setw (28) << right << "Phonen";
cout << person.id << " " << left << setw(20) << person.name << right << setw(20) << person.phone << endl;
//Get new record data.
cout << "nEnter the new data:n";
cout << "Id: ";
cin >> person.id;
cin.ignore();
cout << "Name: ";
cin.getline(person.name, NAME_SIZE);
cout << "Age: ";
cin >> person.age;
cin.ignore();
cout << "Phone: ";
cin.getline(person.phone, PHONE_SIZE);
records.seekp(recNum * sizeof(person), ios::beg);
records.write(reinterpret_cast<char *>(&person),sizeof(person));
records.close();
}
它不是指向大小的指针,星号只是一个乘法。 它将索引乘以文件中存储的元素的大小。
例如,如果每条记录为 20 个字节,则第一条记录的偏移量为 0,第二条记录的偏移量为 20,然后是 40、60,依此类推。
相关文章:
- 使用 seekg() 读取C++中的文件时出现问题
- 字母 'f' 在 printf()、scanf() 和 seekg() 中的 'g' 代表什么?
- basic_istream::seekg() 似乎不起作用
- 读取文本文件时 seekg() 的奇怪偏移量
- Seekg 的行为不符合预期
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 使用 seekp() 和 tellg() 进行数据处理
- 检查 istream::read 和 istream::seekg 失败的最佳方法
- seekg 和 seekp :seek(streampos pos) 和 seek(streamoff off, ios
- 与fstream一起seekp和seekg
- 使用seekg和seekp得到错误的输出
- 如何在c++中使用seekg和seekp附加到文件,而不使用ios:app标志
- C ++ fstream 写入不适用于没有 seekg 和 seekp 的二进制文件
- 在处理二进制文件时了解 Seekg() 和 seekp()
- Seekp 和 seekg 不适用于 Fstream
- "fseek"、"lseek"、"seekg"、"seekp"有什么区别?
- 使用 fstream 创建文件,如果它不存在使用 seekp/seekg?
- c++, fstream和seekp和seekg,奇怪的程序
- 同一文件上的 seekp()、seekg()、read() 和 write() 有问题
- "seekp"和"seekg"可以互换吗?