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
原创粉丝点击