赞
踩
QIODevice会区别两种类型的设备:随机存取设备和顺序存储设备。
文件操作的简单例子:
//main.cpp #include <QCoreApplication> #include <QFileInfo> #include <QStringList> #include <QDateTime> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //以只写方式打开,如果文件不存在,那么会创建该文件 QFile file("myfile.txt"); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){ qDebug() << file.errorString(); } file.write("hello Qt FileSystem"); file.close(); //对于每一个open,需对应一个close //获取文件信息 QFileInfo info(file); qDebug() << QObject::tr("绝对路径:") << info.absoluteFilePath(); qDebug() << QObject::tr("文件名:") << info.fileName(); qDebug() << QObject::tr("基本名称:") << info.baseName(); qDebug() << QObject::tr("后缀:") << info.suffix(); qDebug() << QObject::tr("创建时间:") << info.lastModified(); qDebug() << QObject::tr("大小:") << info.size(); //以只读方式打开 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug() << file.errorString(); } qDebug() << QObject::tr("文件内容:") << file.readAll();//这时将会处在文件的末尾 qDebug() << QObject::tr("当前位置:") << file.pos(); file.seek(0); //回到文件初始位置 QByteArray array; array = file.read(5); //读5个字符 qDebug() << QObject::tr("前5个字符:") << array; qDebug() << QObject::tr("当前位置:") << file.pos(); file.seek(10); array = file.read(5); qDebug() << QObject::tr("11-15个字符:") << array; file.close(); return a.exec(); }
演示效果:
关于QDir小demo:
//main.cpp #include <QCoreApplication> #include <QDir> #include <QDebug> #include <iostream> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QDir dir("."); //不指定的话默认是当前目录 或者指定"."也是当前目录 dir.cdUp();//跳转到父目录 // dir.mkdir("./tmp"); //在当前目录下创建一个目录 std::cout<<"当前目录下的条目数:"<<dir.count()<<std::endl; dir.setFilter(QDir::Dirs); //设置过滤器 dir.setSorting(QDir::Size | QDir::Reversed); //设置排列顺序,即按照目录大小,从小到大排列 // QStringList listNames = dir.entryList(); //返回当前目录下所有条目的名称列表 // foreach(QString fileName,listNames){ // qDebug() << fileName; // } QFileInfoList list = dir.entryInfoList();//返回当前目录下所有条目的信息列表 std::cout << " Bytes Filename" << std::endl; //遍历输出每个条目的信息 for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10).arg(fileInfo.fileName())); std::cout << std::endl; } return 0; }
演示效果:
小demo如下:
//main.cpp #include <QCoreApplication> #include <QFile> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //QTextStream for Test QFile data("output.txt"); if(data.open(QFile::WriteOnly | QFile::Truncate)){ QTextStream out(&data); //写入数据 out << "hello qt!" << "你好 qt!"; } data.close(); QFile file("output.txt"); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ return 0; } QTextStream in(&file); while(! in.atEnd()){ //读数据 QString line = in.readAll(); qDebug() << line; } file.close(); //QDataStream for Test QFile dataforbyte("file.dat"); dataforbyte.open(QIODevice::WriteOnly); QDataStream out(&dataforbyte); // we will serialize the data into the file out << QString("the answer is"); // serialize a string 串行化写入一个字符串 out << (qint32)42; // serialize an integer 串行化写入一个整形数据 dataforbyte.close(); QFile outp("file.dat"); outp.open(QIODevice::ReadOnly); QDataStream in1(&outp); // read the data serialized from the file QString str; qint32 aa; in1 >> str >> aa; // extract "the answer is" and 42 qDebug() << str << " " << aa; outp.close(); return a.exec(); }
演示效果:
QUrl类提供了一个方便的接口来操作URLs。
一个url的标准格式:protocol ://hostname[:port]/path/[?query]#fragment
其中,protocol用来指定传输协议,比如http、ftp等;hostname用来指定存放资源的服务器的域名系统主机名或者ip地址,主机名前面还可以包含连接服务器所需要的用户名和密码;port用来指定端口号,可选,省略时使用默认的端口号,比如http默认端口号是80;path用来指定主机上的目录或者文件地址,路径中可以使用"/"分隔符;query用来设置查询参数,可选,参数间使用“&”符号隔开;frament用来指定网络资源中的片段。使用时,可以在构造函数中传递一个QString来初始化QUrl,或者使用setUrl()设置。
此外,一个URL也可以被一部分一部分地进行构造,例如:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。