今天学习QT的文件操作
1、QIODevice 直接继承自QObject
QIODevice类是输入/输出设备的基类。
QIODevice为设备提供了公共实现和抽象接口用于读写块数据。 QIODevice是一个抽象类,不能被实例化。
被Q3Socket,Q3SocketDevice,QAbstractSocket,QBuffer,QFile,QLocalSocket,QNetworkReply,QProcess继承.
=============================================================================================== 2、QFile
继承自QIODevice
QFile类是一个操作文件的输入/输出设备。
QFile是用来读写二进制文件和文本文件的输入/输出设备。QFile可以自己单独被使用,但是如果和QDataStream或QTextStream一起使用将更加方便。
文件名通常可以通过构造函数来传递,但也可以使用setName()来设置。目录分隔符在任何操作系统下都使用“/\不被支持。你可以通过exists()来检查一个文件是否存在并且可以通过remove()来移去一个文件。更多操作系统相关的高级文件系统操作QT提供了QFileInfo和QDir类.
文件可以用open()来打开、用close()来关闭、用flush()来刷新。数据通常可以使用QDataStream或者QTextStream进行读写,但你也可以使用read(),readLine(),readAll(),write()读写。QFile也支持getChar(),putChar(),和ungetChar()
size()可以返回文件的大小。你可以通过使用pos()函数得到当前文件位置或者使用seek()移到一个新的文件位置。如果你到了文件的末尾,atEnd()返回真。
例1:一行一行读取文件
[c-sharp] view plaincopy
1. #include
5. int main(int argc, char *argv[]) 6. {
7. QCoreApplication a(argc, argv); 8. //中文支持
9. QTextCodec *codec = QTextCodec::codecForName(\); 10. QTextCodec::setCodecForCStrings(codec); 11.
12. QFile file(\); 13. if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { 14. qDebug()<<\< 16. while(!file.atEnd()) { 17. QByteArray line = file.readLine(); 18. QString str(line); 19. qDebug()<< str; 20. } 21. return a.exec(); 22. } 使用QTextStream读取文件 [cpp] view plaincopy 1. #include 5. int main(int argc, char *argv[]) 6. { 7. QCoreApplication a(argc, argv); 8. //中文支持 9. QTextCodec *codec = QTextCodec::codecForName(\); 10. QTextCodec::setCodecForCStrings(codec); 11. //QTextCodec::setCodecForTr(codec); 12. //QTextCodec::setCodecForLocale(codec); 13. QFile file(\); 14. if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { 15. qDebug()<<\< 17. QTextStream in(&file); 18. while( !in.atEnd()){ 19. QString line = in.readLine(); 20. qDebug() << line; 21. } 22. return a.exec(); 23. } QDataStream 重载了运算符了\写数据,>>读数据 [cpp] view plaincopy 1. #include 5. int main(int argc, char *argv[]) 6. { 7. QCoreApplication a(argc, argv); 8. //中文支持 9. QTextCodec *codec = QTextCodec::codecForName(\); 10. QTextCodec::setCodecForCStrings(codec); 11. //QTextCodec::setCodecForTr(codec); 12. //QTextCodec::setCodecForLocale(codec); 13. QFile file(\); 14. if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) { 15. qDebug()<<\< 17. QTextStream stream(&file); 18. QString line_in; 19. // while( !stream.atEnd()){ 20. // line_in = stream.readLine(); 21. // qDebug() << line_in; 22. // } 23. // stream.seek(stream.pos()); 24. stream.seek(file.size());//将当前读取文件指针移动到文件末尾 25. int count = 0; 26. while(count < 10){ 27. stream << QObject::trUtf8(\新建行:\) <<++count<<\; 28. } 29. stream.seek(0);//将当前读取文件指针移动到文件开始 30. while( !stream.atEnd()){ 31. line_in = stream.readLine(); 32. qDebug() << line_in; 33. } 34. return a.exec(); 35. } 3、QDir QDir类提供了访问目录结构和他们的内容。 QDir类提供了访问目录结构和它们的内容的与平台无关的方式。 QDir用来操作路径名称、关于路径和文件的访问信息和操作底层文件系统。 QDir使用相对或绝对文件路径来指向一个文件。绝对路径是从目录分隔符“/”或者带有一个驱动器标识(除了在Unix下)。如果你总是使用“/”作为目录分隔符,Qt将会把你的路径转化为符合底层的操作系统的。相对文件名是由一个目录名称或者文件名开始并且指定一个相对于当前路径的路径。 例如绝对路径: QDir(\ QDir(\ 我们可以使用isRelative()或isAbsolute()函数确认QDir是用的相对路径还是绝对路径。使用makeAbsolute()来转换相对路径的QDir转换成绝对路径的QDir. [c-sharp] view plaincopy 1. #include 4. #include 7. int main(int argc, char *argv[]) 8. { 9. QCoreApplication a(argc, argv); 10. QTextCodec *codec = QTextCodec::codecForName(\); 11. QTextCodec::setCodecForLocale(codec); 12. QTextCodec::setCodecForCStrings(codec); 13. QTextCodec::setCodecForTr(codec); 14. 15. QDir d(\); 16. d.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::AllDirs);//列出文件,列出隐藏文件(在Unix下 就是以.开始的为文件),不列出符号链接(不支持符号连接的操作系统会忽略) 17. d.setSorting(QDir::Size | QDir::Reversed);//按文件大小排序,相反的排序顺序 18. const QFileInfoList list = d.entryInfoList();//返回这个目录中所有目录和文件的QFileInfo对象的列表 19. QFileInfoList::const_iterator iterator = list.begin(); 20. qDebug() << \目录和文件的数量: \ << d.count();//返回找到的目录和文件的数量 21. qDebug() << \; 22. while(iterator != list.end()){ 23. qDebug() << (*iterator).fileName()<<\<<(*iterator).size(); 24. iterator++; 25. } 26. qDebug() << \当前目录: \ << d.current();//返回应用程序当前目录。 27. qDebug() << \当前目录的绝对路径\ << d.currentPath();//返回应用程序当前目录的绝对路径。 28. // const QList 35. return a.exec(); 36. } 运行结果: 4、QFileInfo