|
使用VC++ ATL实现结构体二进制文件读写的完整示例代码
以下是使用VC++ ATL实现结构体二进制文件读写的完整示例代码:
这段代码演示了如何使用ATL的CAtlFile类进行结构体的二进制文件读写。WriteStructToFile函数将结构体写入文件,ReadStructFromFile函数从文件读取结构体。示例中包含了完整的错误处理和大小验证。
StructFileIO.h
- #pragma once
- #include <atlfile.h>
- #include <atlstr.h>
- // 示例结构体
- struct AccountInfo {
- int id;
- char username[32];
- double balance;
- bool isActive;
- };
复制代码 StructFileIO.cpp
- #include "StructFileIO.h"
- // 写入结构体到二进制文件
- bool WriteStructToFile(const CString& filePath, const AccountInfo& data) {
- CAtlFile file;
- if (FAILED(file.Create(filePath, GENERIC_WRITE, FILE_SHARE_READ, CREATE_ALWAYS))) {
- return false;
- }
- DWORD bytesWritten = 0;
- HRESULT hr = file.Write(&data, sizeof(AccountInfo), bytesWritten);
- file.Close();
-
- return SUCCEEDED(hr) && (bytesWritten == sizeof(AccountInfo));
- }
- // 从二进制文件读取结构体
- bool ReadStructFromFile(const CString& filePath, AccountInfo& outData) {
- CAtlFile file;
- if (FAILED(file.Create(filePath, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING))) {
- return false;
- }
- DWORD fileSize = 0;
- file.GetSize(fileSize);
- if (fileSize != sizeof(AccountInfo)) {
- file.Close();
- return false;
- }
- DWORD bytesRead = 0;
- HRESULT hr = file.Read(&outData, sizeof(AccountInfo), bytesRead);
- file.Close();
-
- return SUCCEEDED(hr) && (bytesRead == sizeof(AccountInfo));
- }
- // 使用示例
- void ExampleUsage() {
- AccountInfo account = {1001, "testUser", 5000.0, true};
- CString filePath = L"C:\\temp\\account.dat";
-
- // 写入示例
- if (WriteStructToFile(filePath, account)) {
- // 读取示例
- AccountInfo loadedAccount;
- if (ReadStructFromFile(filePath, loadedAccount)) {
- // 使用读取的数据...
- }
- }
- }
复制代码
|
|