在 Qt 中进行二进制文件读写操作,主要使用 `QFile` 和 `QDataStream` 类。以下是详细步骤和注意事项:
一、基础概念
QFile:
提供文件 I/O 设备接口,负责与物理文件交互(如打开、关闭、读写等)。
QDataStream:
以数据流方式读写数据,支持平台无关的二进制格式存储,可序列化复杂数据类型(如自定义类)。
二、核心方法
1. 写入二进制文件
打开文件:使用 `QFile::open()` 以二进制写模式(`QIODevice::WriteOnly`)打开文件。
创建数据流:将 `QFile` 对象传递给 `QDataStream` 实例。
写入数据:使用 `QDataStream` 的 `<<` 运算符写入基本数据类型或自定义对象。
关闭文件:使用 `file.close()` 或 `file.flush()` 确保数据写入完成。
示例代码:
```cpp
include include include int main() { QFile file("example.dat"); if (!file.open(QIODevice::WriteOnly)) { qDebug() << "Failed to open file for writing"; return -1; } QDataStream out(&file); out << QString("Hello, Binary File!") << quint32(42) << quint16(12345); file.close(); return 0; } ``` 2. 读取二进制文件 打开文件:以二进制读模式(`QIODevice::ReadOnly`)打开文件。 创建数据流:将 `QFile` 对象传递给 `QDataStream` 实例。 读取数据:使用 `QDataStream` 的 `>>` 运算符按顺序读取数据,类型需与写入时一致。 关闭文件:使用 `file.close()` 或 `file.flush()` 确保数据读取完成。 示例代码: ```cpp include include include int main() { QFile file("example.dat"); if (!file.open(QIODevice::ReadOnly)) { qDebug() << "Failed to open file for reading"; return -1; } QDataStream in(&file); QString message; quint32 number; quint16 value; in >> message >> number >> value; file.close(); qDebug() << "Message:" << message; qDebug() << "Number:" << number; qDebug() << "Value:" << value; return 0; } ``` 三、注意事项 `QDataStream` 处理数据时自动处理平台差异(如字节序),确保可跨平台读写。 支持自定义类序列化,需重载 `<<` 和 `>>` 运算符。 实际应用中需检查文件打开状态,并处理可能的异常。 使用 `.dat` 扩展名保存原始二进制数据,使用 `.stm` 扩展名保存带预定义编码的数据。 通过以上方法,可灵活实现二进制文件的读写操作,满足不同场景需求。数据对齐与平台无关性:
序列化复杂类型:
错误处理:
文件扩展名: