|
VC++mfc 增加,读取,修改,删除二进制数据等操作源码
在VC++ MFC中,进行二进制数据的增加、读取、修改和删除操作,通常涉及到文件的操作。以下是一个示例代码,展示如何使用MFC进行这些操作。
### 示例代码
以下代码演示了如何在二进制文件中进行数据的增加、读取、修改和删除操作:
- #include <afx.h>
- #include <iostream>
- #include <vector>
- class BinaryFileManager {
- public:
- BinaryFileManager(const CString& filePath) : m_filePath(filePath) {}
- // 增加数据
- void AddData(const std::vector<int>& data) {
- CFile file;
- if (!file.Open(m_filePath, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)) {
- std::cerr << "无法打开文件进行写入: " << m_filePath.GetString() << std::endl;
- return;
- }
- for (int value : data) {
- file.Write(&value, sizeof(value)); // 写入数据
- }
- file.Close();
- }
- // 读取数据
- void ReadData() {
- CFile file;
- if (!file.Open(m_filePath, CFile::modeRead | CFile::typeBinary)) {
- std::cerr << "无法打开文件进行读取: " << m_filePath.GetString() << std::endl;
- return;
- }
- int value;
- while (file.Read(&value, sizeof(value)) > 0) {
- std::cout << value << std::endl; // 输出读取的数据
- }
- file.Close();
- }
- // 修改数据
- void ModifyData(int oldValue, int newValue) {
- std::vector<int> data;
- CFile file;
- // 读取现有数据
- if (!file.Open(m_filePath, CFile::modeRead | CFile::typeBinary)) {
- std::cerr << "无法打开文件进行读取: " << m_filePath.GetString() << std::endl;
- return;
- }
- int value;
- while (file.Read(&value, sizeof(value)) > 0) {
- if (value == oldValue) {
- value = newValue; // 修改值
- }
- data.push_back(value); // 保存数据
- }
- file.Close();
- // 重新写入数据
- if (!file.Open(m_filePath, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)) {
- std::cerr << "无法打开文件进行写入: " << m_filePath.GetString() << std::endl;
- return;
- }
- for (int val : data) {
- file.Write(&val, sizeof(val)); // 写入修改后的数据
- }
- file.Close();
- }
- // 删除数据
- void DeleteData(int valueToDelete) {
- std::vector<int> data;
- CFile file;
- // 读取现有数据
- if (!file.Open(m_filePath, CFile::modeRead | CFile::typeBinary)) {
- std::cerr << "无法打开文件进行读取: " << m_filePath.GetString() << std::endl;
- return;
- }
- int value;
- while (file.Read(&value, sizeof(value)) > 0) {
- if (value != valueToDelete) {
- data.push_back(value); // 跳过要删除的值
- }
- }
- file.Close();
- // 重新写入数据
- if (!file.Open(m_filePath, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)) {
- std::cerr << "无法打开文件进行写入: " << m_filePath.GetString() << std::endl;
- return;
- }
- for (int val : data) {
- file.Write(&val, sizeof(val)); // 写入剩余的数据
- }
- file.Close();
- }
- private:
- CString m_filePath;
- };
- int main() {
- CString filePath = _T("data.bin"); // 假设文件名为 data.bin
- BinaryFileManager fileManager(filePath);
- // 增加数据
- std::vector<int> dataToAdd = {1, 2, 3, 4, 5};
- fileManager.AddData(dataToAdd);
- // 读取数据
- std::cout << "读取的数据:" << std::endl;
- fileManager.ReadData();
- // 修改数据
- fileManager.ModifyData(3, 30); // 将3修改为30
- // 删除数据
- fileManager.DeleteData(2); // 删除值为2的数据
- // 再次读取数据以查看更改
- std::cout << "\n修改和删除后的数据:" << std::endl;
- fileManager.ReadData();
- return 0;
- }
复制代码
### 代码说明
1. **BinaryFileManager类**:该类负责二进制文件的增加、读取、修改和删除操作。
- **AddData**:将一个整数数组写入二进制文件。
- **ReadData**:从二进制文件读取数据并输出。
- **ModifyData**:查找并修改文件中的指定值。
- **DeleteData**:删除文件中与指定值相同的数据。
2. **主函数**:
- 创建 `BinaryFileManager` 实例,并指定要操作的文件路径。
- 调用 `AddData` 方法增加数据。
- 调用 `ReadData` 方法读取并输出文件内容。
- 调用 `ModifyData` 方法修改文件中的数据。
- 调用 `DeleteData` 方法删除特定数据。
- 再次读取文件内容以查看更改。
### 注意事项
- 确保文件路径正确,并且程序有读写权限。
- 在实际应用中,建议添加更多的错误处理机制,以提高程序的健壮性。
- 该示例仅处理整数数据,实际应用中可能需要处理更复杂的数据结构或格式。
|
|