QT下文件的读写
来源:互联网 发布:兴业信用卡淘宝卡年费 编辑:程序博客网 时间:2024/04/27 21:46
前段时间一直在编写Qt程序,其中涉及到二进制文件和txt文本文件的读写操作,程序编写完成后在此做个总结,方便以后查证:
首先,需要知道在进行什么操作后文件才会得到新建
1、不能在没有对应目录的情况下新建文件,QFile只会新建文件,QDir才会新建文件夹
例:在没有新建目录newdir的情况下,直接新建文件newfile(QFile file("newdir/newfile"))结果失败
2、如果对应目录存在,newfile不存在,使用以下2行代码,文件newfile依然不会生成
QFile file("newfile"); file.open(QIODevice::ReadWrite);QT下如果要创建这个新文件,还需要调用close(),这个时候newfile才会被创建
完整的代码为
QFile file("newfile"); file.open(QIODevice::ReadWrite); file.close();
3、如果想通过改变当前路径的方法,在指定目录下新建文件
system("cd /home/dingxy/new ");//或者QDir::setCurrent("/home/dingxy/new ");QFile file("newdir/newfile");在/home/dingxy/new目录下不一定存在newfile文件,因为以上2个函数不一定执行成功,需要查看system()函数和setCurrent()函数执行的结果,确认返回值正确后,新建文件操作才会成功
步入正题
QT下进行读写的三种方式
1、使用write、read函数读写
二进制文件的读写,适合各种数据类型的读写,写入和读出的顺序需相同,当写入数据种包含QString型数据时,在使用seek()进行调转时要尤其注意,QString型数据的长度不是固定的4个字节,而是实际长度
char head; int hSize = sizeof(HEAD); QFile file("name"); file.open(QIODevice::ReadWrite);写入:
file.write((char *)&head, hSize);读出:
file.seek(0); file.read((char *)&head,hSize);
2、使用QDataStream读写
二进制文件的读写,适合所有数据类型的读写
QFile file; file.setFileName("site"); file.open(QIODevice::ReadWrite); QDataStream stream(&file);
写入:
qint8 a = 10; qint8 b; stream << a;读出:
stream->seek(0); stream >> b; file.close(); //b = 10;
适合所有数据类型写入,但若一个文件内写入多条数据,但若写入QString型数据,在使用seek()进行跳转时,一定要非常注意,由于QString的随实际写入的数据长度变化,QString所占的空间不一定是4个字节,需要注意数据长度问题。
可以通过每次跳转固定长度的方式解决
若认定为name的长度不超过8个字节
QString name = "aaabbb";QString names;如果想在第17个字节处写入name;
stream << (qint64)0 <<(qint64)0 <<(qint64)0; stream.device()->seek(16); stream << name; stream.device()->seek(16); stream >> names;//names = "aaabbb";
3、使用QTextStream读写
txt文本文件的读写,适合QString,qintx等数据类型的读写,char型写入时,要注意数据转换,否则会显示乱码
写入和读出的顺序需相同,当写入数据种包含QString型数据时,在使用seek()进行调转时要尤其注意,QString型数据的长度不是固定的4个字节,而是实际长度
QFile file; file.setFileName("site"); file.open(QIODevice::ReadWrite); QTextStream stream(&file);
写入:
char a = 10; QString temp; char b; stream << qint8(a);
读出:
stream->seek(0); stream.device() >> temp; file.close(); b = temp.toInt()- 48;//ASCII码转换 //b = 10;读出:
QString line = stream.readLine();//读出一行中文字符写入时,可用streams << QObject::trUtf8("操作类型编码") 写入
题外话:
写入文件的时候发现一个问题,在arm开发板上挂载优盘进行读写操作后,若不执行umount,直接拔下优盘,可能导致数据丢失
解决方法:
umount /dev/sdb1docfsck -a -v /dev/sdb1
0 0
- QT下文件的读写
- Qt下文件的创建和读写
- linux下文件的读写操作
- ubuntu下文件读写
- Python Windows下文件读写与二进制读写的区别
- vxworks下文件读写示例
- Linux下文件读写示例
- php中,高并发状态下文件的读写
- PHP高并发状态下文件的读写(转)
- Android下文件操作模式(含SDCard的读写)
- 【转载】php中,高并发状态下文件的读写
- linux下文件的读写操作( open read write)
- Cocos2d-x 文件路径下文件的读写
- linux下文件的读写操作(open read write)
- linux下文件的读写操作(openreadwrite)
- Linux下文件的读写操作( open read write)
- linux下文件的读写操作(openreadwrite)
- php中高并发状态下文件读写
- 浏览器插件屏蔽优酷广告的原理
- 禁止运行两个实例
- eclipse插件开发,调试运行,导出与安装
- 关于ip_finish_output2的一点分析
- iOS 设计模式之抽象工厂
- QT下文件的读写
- UVA 10099 The Tourist Guide
- afx_msg的定义与应用
- 1411102159-ny-背包问题
- Java 1030 接口
- 复制一个图片
- [LeetCode]Best Time to Buy and Sell Stock 系列
- linux下java环境变量配置
- uva10000 Longest Paths