VC笔记-如何从txt文本中读写结构体数据
在VC++编程中,有时我们需要将结构体的数据存入文本文件并在之后读取。这篇笔记主要探讨了如何处理这个问题,特别是在处理结构体成员为不同数据类型(如整型、浮点型和字符串)时的读写操作。我们将通过一个简单的例子来详细说明整个过程。 我们定义了一个名为`student`的结构体,它包含三个成员:一个短整型`m1`,一个单精度浮点型`m2`,以及一个长度为20的字符数组`m3`,用来存储字符串。 ```cpp struct student{ short m1; float m2; char m3[20]; }; ``` 接下来,我们创建两个`student`结构体实例`aa[2]`,并为其分配值。例如,我们可以为`aa[0]`和`aa[1]`分别设置值: ```cpp int i1, i2; float j1, j2; CString str1, str2; i1 = 20; j1 = 20.3f; str1 = "lifanupc02"; i2 = 30; j2 = 30.3f; str2 = "lifanupc03"; char szStr[20]; // 将字符串赋值到结构体的m3成员,注意处理字符串长度超过20的情况 aa[0].m1 = 2; aa[0].m2 = 2.3f; if (str1.GetLength() < 20) lstrcpy(aa[0].m3, str1); else // 如果字符串过长,进行截断 { memcpy(aa[0].m3, str1, 19); szStr[19] = '\0'; } aa[1].m1 = 2; aa[1].m2 = 2.3f; if (str2.GetLength() < 20) lstrcpy(aa[1].m3, str2); else { memcpy(aa[1].m3, str2, 19); szStr[19] = '\0'; } ``` 写入数据到文本文件时,我们使用`CFile`类来操作文件。在这个例子中,我们创建一个`CFile`对象`file`,并以二进制模式打开或创建文件"123.txt": ```cpp CFile file; file.Open("123.txt", CFile::modeWrite | CFile::modeCreate | CFile::typeBinary); ``` 然后,我们调用`Write`方法,将整个`aa`数组(即两个`student`结构体实例)写入文件: ```cpp file.Write(&aa, sizeof(aa)); ``` 完成写入后,关闭文件: ```cpp file.Close(); ``` 读取数据的过程与写入类似。首先打开文件,这次是以读取二进制模式: ```cpp file.Open("123.txt", CFile::modeRead | CFile::typeBinary); ``` 然后,使用`Read`方法一次性读取整个数组到`aa`: ```cpp file.Read(&aa, sizeof(aa)); ``` 关闭文件并处理读取的数据: ```cpp file.Close(); // 访问读取的结构体数据 m1 = aa[1].m1; m2 = aa[1].m2; str1 = aa[1].m3; ``` 这里需要注意的是,当读取字符串时,`aa[1].m3`已经被解析为一个字符数组,可以直接赋值给`CString`对象,无需额外格式化。 总结来说,这个例子展示了如何在VC++环境中使用`CFile`类进行结构体数据的读写操作。这包括了结构体的定义、初始化、文件的打开、数据的写入和读取,以及处理字符串过长的情况。在实际项目中,这样的操作可能需要进行错误检查和异常处理,以确保程序的健壮性。
- yskllb2013-11-04虽然内容很简单,但还是帮上了点忙,谢谢
- kuankuan_qiao2013-08-23不错 适合初学者 可以看看
- uestcryx2011-11-10代码写的很详细。。很容易懂。。
- 凯风19872011-11-20很好,就是有的地方不够详细
- 普通网友2013-11-18内容简单 但就是我要的东西
- 粉丝: 1
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- com.huawei.it.ilearning.android_v260.apk
- 鸟类目标检测数据集-含画眉鸟-百灵鸟xml文件数据集
- pyheif-0.8.0-cp37-cp37m-win-amd64.whl.zip
- 基于深度学习的鸟类种类目标检测-含数据集和训练代码-对百灵鸟-画眉鸟检测.zip
- pyheif-0.8.0-cp38-cp38-win-amd64.whl.zip
- pyheif-0.8.0-cp39-cp39-win-amd64.whl.zip
- pyheif-0.8.0-cp313-cp313-win-amd64.whl.zip
- MyBatis SQL mapper framework for Java.zip
- pyheif-0.8.0-cp312-cp312-win-amd64.whl.zip
- pyheif-0.8.0-cp311-cp311-win-amd64.whl.zip