在C++中,如何从二进制文件读取User数据?
时间: 2024-10-01 09:04:00 浏览: 32
在C++中,从二进制文件读取`User`数据需要使用`ifstream`来读取之前保存的二进制内容。下面是一个例子,展示了如何读取上述`exportToBinary`函数导出的数据:
```cpp
#include <fstream>
#include <vector>
#include <string>
struct User {
int id;
std::string name;
};
User importFromBinary(const std::string& filename) {
std::ifstream inputFile(filename, std::ios::binary);
if (inputFile.is_open()) {
// 读取id
std::streampos pos; // 获取当前位置
inputFile.read(reinterpret_cast<char*>(&pos), sizeof(pos)); // 读取位置信息
inputFile.seekg(pos); // 移动到正确的字节位置
int userId;
inputFile.read(reinterpret_cast<char*>(&userId), sizeof(userId));
// 读取字符串长度
inputFile.read(reinterpret_cast<char*>(&pos), sizeof(pos));
inputFile.seekg(pos); // 移动到字符串开始位置
std::string userName((std::istreambuf_iterator<char>(inputFile)), (std::istreambuf_iterator<char>{}));
// 创建并返回User对象
User user;
user.id = userId;
user.name = userName;
inputFile.close();
return user;
} else {
std::cerr << "Failed to open input file." << std::endl;
return User(); // 或者抛异常
}
}
// 使用示例
int main() {
User loadedUser = importFromBinary("users.bin");
std::cout << "Loaded user: id=" << loadedUser.id << ", name=\"" << loadedUser.name << "\"" << std::endl;
return 0;
}
```
在这个例子中,我们首先定位到`id`的位置,然后读取它的值。接着读取字符串长度,找到字符串的实际位置,并读取整个字符串。
阅读全文