精华内容
下载资源
问答
  • Qt 文件搜索

    2013-05-07 15:43:28
    Qt 文件搜索 代码无意间在网上找到,下载回来后改了几个格式,编译后经测试可以正常使用,这个个文件搜索的很好的例子,有两种搜索方式:一种是按文件名作为关键字进行搜索,一种是以文档中所包含的关键字...

    Qt 文件搜索

    代码无意间在网上找到,下载回来后改了几个格式,编译后经测试可以正常使用,这个个文件搜索的很好的例子,有两种搜索方式:一种是按文件名作为关键字进行搜索,一种是以文档中所包含的关键字进行搜索,贴两张图先:

    上图为两个文本文档(都位于C盘根目录下),其中都包含有"2010-12-05"这样的关键字,一会就用这个关键字搜索看看行不行...

    注意:这个实例程序无法进行递归的查找,只能搜索指定目录这一层的文件,另外它只能匹配文本文档。

     

     

    复制代码
        
    1 #ifndef WINDOW_H 2 #define WINDOW_H 3 4 #include < QDialog > 5 class QComboBox; 6 class QDir; 7 class QLabel; 8 class QPushButton; 9 class QTableWidget; 10 11 class Window: public QDialog 12 { 13 Q_OBJECT 14 public : 15 Window(QWidget * parent = 0 ); 16 private slots: 17 void browse(); 18 void find(); 19 private : 20 QStringList findFiles( const QDir & directory, const QStringList & files, 21 const QString & text); 22 void showFiles( const QDir & directory, const QStringList & files); 23 QPushButton * createButton( const QString & text, const char * member); 24 QComboBox * createComboBox( const QString & text = QString()); 25 void createFilesTable(); 26 QComboBox * fileComboBox; 27 QComboBox * textComboBox; 28 QComboBox * directoryComboBox; 29 QLabel * fileLabel; 30 QLabel * textLabel; 31 QLabel * directoryLabel; 32 QLabel * filesFoundLabel; 33 QPushButton * browseButton; 34 QPushButton * findButton; 35 QTableWidget * filesTable; 36 }; 37 38 #endif 39
    复制代码

     

    复制代码
        
    1 #include < QtGui > 2 #include " window.h " 3 Window::Window(QWidget * parent) 4 : QDialog(parent) 5 { 6 browseButton = createButton(tr( " &Browse... " ),SLOT(browse())); 7 findButton = createButton(tr( " &Find " ),SLOT(find())); 8 fileComboBox = createComboBox(tr( " * " )); 9 textComboBox = createComboBox(); 10 directoryComboBox = createComboBox(QDir::currentPath()); 11 fileLabel = new QLabel(tr( " Named: " )); 12 textLabel = new QLabel(tr( " Containing text: " )); 13 directoryLabel = new QLabel(tr( " In directory: " )); 14 filesFoundLabel = new QLabel; 15 createFilesTable(); 16 QHBoxLayout * buttonsLayout = new QHBoxLayout; 17 buttonsLayout -> addStretch(); 18 buttonsLayout -> addWidget(findButton); 19 QGridLayout * mainLayout = new QGridLayout; 20 mainLayout -> addWidget(fileLabel, 0 , 0 ); 21 mainLayout -> addWidget(fileComboBox, 0 , 1 , 1 , 2 ); 22 mainLayout -> addWidget(textLabel, 1 , 0 ); 23 mainLayout -> addWidget(textComboBox, 1 , 1 , 1 , 2 ); 24 mainLayout -> addWidget(directoryLabel, 2 , 0 ); 25 mainLayout -> addWidget(directoryComboBox, 2 , 1 ); 26 mainLayout -> addWidget(browseButton, 2 , 2 ); 27 mainLayout -> addWidget(filesTable, 3 , 0 , 1 , 3 ); 28 mainLayout -> addWidget(filesFoundLabel, 4 , 0 ); 29 mainLayout -> addLayout(buttonsLayout, 5 , 0 , 1 , 3 ); 30 setLayout(mainLayout); 31 setWindowTitle(tr( " Find Files " )); 32 resize( 700 , 300 ); 33 } 34 void Window::browse() 35 { 36 QString directory = QFileDialog::getExistingDirectory( this , 37 QObject::tr( " Find Files " ),QDir::currentPath()); 38 if ( ! directory.isEmpty()) { 39 directoryComboBox -> addItem(directory); 40 directoryComboBox -> setCurrentIndex(directoryComboBox -> currentIndex() + 1 ); 41 } 42 } 43 void Window::find() 44 { 45 filesTable -> setRowCount( 0 ); 46 QString fileName = fileComboBox -> currentText(); 47 QString text = textComboBox -> currentText(); 48 QString path = directoryComboBox -> currentText(); 49 QDir directory = QDir(path); 50 QStringList files; 51 if (fileName.isEmpty()) fileName = " * " ; 52 files = directory.entryList(QStringList(fileName), 53 QDir::Files | QDir::NoSymLinks); 54 if ( ! text.isEmpty()) 55 files = findFiles(directory,files,text); 56 showFiles(directory,files); 57 } 58 QStringList Window::findFiles( const QDir & directory, const QStringList & files, 59 const QString & text) 60 { 61 QProgressDialog progressDialog( this ); 62 progressDialog.setCancelButtonText(tr( " &Cancel " )); 63 progressDialog.setRange( 0 ,files.size()); 64 progressDialog.setWindowTitle(tr( " Find Files " )); 65 QStringList foundFiles; 66 for ( int i = 0 ; i < files.size(); ++ i) { 67 progressDialog.setValue(i); 68 progressDialog.setLabelText(tr( " Searching file number %1 of %2... " ) 69 .arg(i).arg(files.size())); 70 qApp -> processEvents(); 71 if (progressDialog.wasCanceled()) break ; 72 QFile file(directory.absoluteFilePath(files[i])); 73 if (file.open(QIODevice::ReadOnly)) { 74 QString line; 75 QTextStream in ( & file); 76 77 while ( ! in .atEnd()) { 78 if (progressDialog.wasCanceled()) break ; 79 line = in .readLine(); 80 if (line.contains(text)) { 81 foundFiles << files[i]; 82 break ; 83 } 84 } 85 } 86 } 87 return foundFiles; 88 } 89 void Window::showFiles( const QDir & directory, const QStringList & files) 90 { 91 for ( int i = 0 ; i < files.size(); ++ i) { 92 QFile file(directory.absoluteFilePath(files[i])); 93 qint64 size = QFileInfo(file).size(); 94 QTableWidgetItem * fileNameItem = new QTableWidgetItem(files[i]); 95 fileNameItem -> setFlags(Qt::ItemIsEnabled); 96 QTableWidgetItem * sizeItem = new QTableWidgetItem(tr( " %1 KB " ) 97 .arg( int ((size + 1023 ) / 1024 ))); 98 sizeItem -> setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); 99 sizeItem -> setFlags(Qt::ItemIsEnabled); 100 int row = filesTable -> rowCount(); 101 filesTable -> insertRow(row); 102 filesTable -> setItem(row, 0 ,fileNameItem); 103 filesTable -> setItem(row, 1 ,sizeItem); 104 } 105 filesFoundLabel -> setText(tr( " %1 file(s) found " ).arg(files.size())); 106 } 107 QPushButton * Window::createButton( const QString & text, const char * member) 108 { 109 QPushButton * button = new QPushButton(text); 110 connect(button,SIGNAL(clicked()), this ,member); 111 return button; 112 } 113 QComboBox * Window::createComboBox( const QString & text) 114 { 115 QComboBox * comboBox = new QComboBox; 116 comboBox -> setEditable( true ); 117 comboBox -> addItem(text); 118 comboBox -> setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); 119 return comboBox; 120 } 121 void Window::createFilesTable() 122 { 123 filesTable = new QTableWidget( 0 , 2 ); 124 QStringList labels; 125 labels << tr( " File Name " ) << tr( " Size " ); 126 filesTable -> setHorizontalHeaderLabels(labels); 127 filesTable -> horizontalHeader() -> setResizeMode( 0 ,QHeaderView::Stretch); 128 filesTable -> verticalHeader() -> hide(); 129 filesTable -> setShowGrid( false ); 130 } 131
    复制代码

     

     

    复制代码
        
    1 #include " window.h " 2 #include < QApplication > 3 4   int main( int argc, char * argv[]) 5 { 6 QApplication app(argc,argv); 7 Window window; 8 window.show(); 9 return app.exec(); 10 } 11  
    复制代码

     

     转自:http://www.cnblogs.com/hicjiajia/archive/2010/12/05/1896823.html

    展开全文
  • Qt实现文件搜索

    2019-08-28 16:08:20
    运用Qt框架实现文件搜索,将文件搜索算法进行改良,可以浏览文件夹里面的文件进行搜索,可以双击表里面的文件进行编辑,支持.docx、.xlsx、.pptx、.accdb、.txt等文件格式的编辑,供学习和研究。
  • 主要实现方法:遍历文件夹,文件列表写入sqlite,每天第一启动或修改目录后更新文件列表,分页显示每次100条数据。用空格分开字符串模糊搜索文件
  • Qt开发的Windows文件搜索工具。支持指定目录和文件,并按照文件名,或文件内容的进行搜索。对于搜索结果,支持删除列表、彻底删除、删除到回收、排序和导出CSV操作。对展示列表支持单击、双击、右键和表头排序操作。...
  • QT递归搜索文件(entryList)

    千次阅读 2018-10-29 13:03:21
    QStringList test111111::findFiles(const QString &amp;startDir, QStringList filters) { QStringList names;... //搜索当前目录符合条件的文件 foreach (QString file, dir.entryList(filters, QDi...
    QStringList test111111::findFiles(const QString &startDir, QStringList filters) 
    { 
    	QStringList names; 
    	QDir dir(startDir); 
    
    	//搜索当前目录符合条件的文件
    	foreach (QString file, dir.entryList(filters, QDir::Files)) 
    		names += startDir + '/' + file; 
    
    	//搜索当前目录的子目录符合条件的文件
    	foreach (QString subdir, dir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)) 
    		names += findFiles(startDir + '/' + subdir, filters); 
    
    	return names; 
    }

    函数调用举例:

    QStringList files = findFiles("./", QStringList() << "*.cpp" << "*.h");

    搜索当前目录 ./ 及其子目录下的.cpp文件和.h文件。

    展开全文
  • Qt文件处理

    千次阅读 2012-10-10 11:46:37
    Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFile,获取文件信息可以使用QFileInfo ,处理目录可以使用QDir.监视...

    Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件,Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFile,获取文件信息可以使用QFileInfo
    ,处理目录可以使用QDir.监视文件和目录变化可以使用QFileSystemWatcher.
    读写文本文件
    QFile类提供了读写文件的接口,QFile类可以读写文本文件,二进制文件和Qt资源文件,也可以使用更方便的QTextStream,QDataStream类读取文本文件和二进制文件,要打开一个文件,可以在构造函数中指定文件名,也可以在任何时候使用setFileName()函数设置文件名,打开文件使用open函数,关闭文件使用close函数。QFile中可以使用QIODevice中继承的readLine()函数读写文本文件的一行。如:

    如果读取成功,readLine返回实际读取的字节数,如果读取失败则返回-1
    QTextStream提供了更为方便的接口来读写文本,QTextStream可以操作QIODevice,QByteArray,QString.QTextStream使用流操作符,可以方便地读写单词,行和数字。为了产生文本,QTextStream提供了填充,对齐和数字格式化的格式选项。如

    TextStream的格式化函数
    ----------------------------------------------
    qSetFieldWidth(int width)  设置字段宽度
    qSetPadChar(QChar ch)      设置填充字符
    qSetRealNumberPrecision(int precision) 设置实数精度
    ----------------------------------------------
    在QTextStream中使用的默认编码是QTextCodec::codecForLocal()函数返回的编码,同时能够自动检测Unicode。也可以使用QTextStream::setCodec(QTextCodec *codec)函数设置的流编码。

    操作二进制文件
    QDataStream类提供了将二进制文件串行化的功能,QDataStream实现了c++基本数据类型的串行化,如char,short,int char* 更复杂的数据类型串行化通过将数据类型分解为基本的数据类型来完成。下面用来写二进制数据到数据流。

    每一个条目都可以定义的二进制格式写入文件,Qt中的很多类型,包括QBrush,QColor,QDateTime,QFont,QPixmap,QString,QVariant等都可以写入数据流。

    如果需要读取原始数据,可以使用readRawData()读取数据到预先定义好的char *缓冲区,写原始数据使用writeData(),读写原始数据需要对数据进行编码和解码。
    下面例子演示了使用QDataStream进行读写文件的过程。

    在例子中,QDataStream类写入了姓名(QString),生日(QDate),和年龄(qint32)三个数据,读取时使用相同的类型读出。QDataStream可以读取任意以QIODevice为基类生成的对象产生的数据。如QTcpSocket,QUdpSocket,QBuffer,QFile,QProcess等类的数据。可以使用QDataStream在QAbstractSocket一端写入数据,另一端使用QDataStream读取数据,这样就免去了繁琐的
    高低端字节转换过程。
    临时文件
    实际应用中有时可能需要使用临时文件,Qt中提供QTemporaryFile类来提供临时文件。QTemporayFile可以安全地创建一个第一无二的临时文件。临时文件通过open()来创建。Qt可以保证临时文件不会重复。在临时文件对象销毁后,将自动删除该临时文件。临时文件通过close()关闭后还可以打开,只要临时文件对象还没有销毁,临时文件就一直存在并由QTemporaryFile内部保持打开。系统的临时目录可以通过QDir::tempPath()来获取,unix/linux系统上的临时目录通常时/temp在windows上通常是TEM/TMP指定

    目录操作和文件管理
    QDir类具有存取目录结构和内容的能力。使用QDir可以操作目录,存取目录或文件信息,操作底层文件系统,而且还可以存取Qt的资源文件。Qt使用/作为通用的目录分割符和URL路径分隔符。Qt可以使用相对路径和绝对路径指向一个文件,isRelative()和isAbsolute()函数可以判断QDir对象使用的是相对路径还是绝对路径。将相对路径转换为绝对路径使用makeAbsolute()函数。目录路径可以通过path()函数返回,通过setPath()函数设置新路径,绝对路径使用absolutePath()返回。目录名可以使用dirName()返回。目录的路径可以通过cd() cdUp()改变,可以使用mkdir()创建目录,rename()改变目录名。判断目录是否存在可以使用exists(),目录的属性可以使用 isReadable(),isAbsolute(),isRelative()和isRoot()来获取,目录下有很多条目,包括文件,目录和符号链接,总的条目数可以使用count()来统计。entryList()可以返回目录下所有条目组成的字符串链表,文件可以使用remove()函数删除,rmdir()删除目录。
    linux du命令

    函数du()中,entryInfoList(QDir::Files)函数返回文件信息,然后根据这些信息计算文件大小,接下来判断是否有子目录,如果有则递归计算。dir.etnryList(QDir::Dirs|QDir::NoDotAndDotDot)返回所有子目录并过滤掉. .. 目录。由于windows(),linux平台/ \差异,使用QDir::separator()函数来返回特定平台的目录分隔符。另外QDirIterator可以完成
    枚举目录的功能,Qt4.3还引入了文件搜索前缀的概念,文件搜索前缀时至少由两个字符组成,用来搜索指定文件的路径。
    QDir::setSearchPaths("docs",QStringList("c:\My Docments"));
    QDir::addSearchPaht("Docs",QStringList("D:|Documents"));
    QFile file("docs::qt4.doc");
    这样就可以在两个目录中查找。

    文件管理
    QFileInfo类提供了与系统无关的文件信心,它能提供文明名和路径,存取权限,以及文件是否为目录或符号链接,文件大小,以及最后修改/读取的时间等。QFileInfo也能从资源中获取信息。QFileInfo可以使用相对路径或绝对路径。文件名可以在QFileInfo的构造函数中传递,也可以使用setFile()函数指定,要判断一个函数是否存在,使用exits()函数,文件大小可以通过size()函数获取,文件类型可以通过isFile(),isDir(),isSymLink()来获取,symLinkTarget()函数返回符号链接所指向的真正文件名。QFileInfo提供refresh函数刷新文件信息,如果需要QFileInfo每次从文件系统读取信息,二不是从缓存读取,可以使用setCaching(false)关闭缓存。文件名和目录可以通过path()和fileName()分解,fileName()返回的部分可以通过baseName()和extension()来获得主文件名和扩展文件名,文件的操作日期可以通过created(),lastModified()和lastRead()获取,文件的存取权限可通国isReadable,isWriteable(),isExcutetable()获取,文件的属主可以通过owner(),ownerId,group(),groupId()获取,文件的权限和属主也可以通过 permission()一起读取。

    监视文件系统的变化
    在Qt中可以使用QFileSystemWatcher类来监视文件和目录的改变.使用addPath()函数来监视指定的文件和目录,如果需要监视多个目录,使用addPaths()来加入监视,如果要一处不需要监视的目录,可以使用removePath(),removePaths()函数.当监视的文件被修改或删除时,产生一个fileChanged()信号,如果被监视的目录被修改或删除,产生directoryChanged()信号,下例实现了监视指定目录的功能.

    在构造函数中读取命令指定的目录作为监视目录,如果没有指定则监视当前目录,使用connect()函数将目录的directroyChanged()信号和响应函数连接.

    文件引擎
    Qt的QtDir,QFile,QFileInfo类在内部都使用一个类,QAbstractFileEngine.通过继承QAbstractFileEngine类,可以编写自己的文件处理函数,然后继承QAbstractFileEngineHander类注册自己的文件引擎,然后这样就可以使用自己的文件读取引擎了.QAbstractFileEngineHandler是创建QAbstractFileEngine的类工厂.当打开一个文件时,Qt通过内部注册的文件引擎链表,选择合适的文件引擎并创建相应的引擎对象.为了安装一个特定的文件引擎,必须继承QAbstractFileEngineHandler并实现create()函数.实例化引擎时Qt自动注册该引擎,最后注册的引擎比之前注册的优先级高.
    如果想读取tar文件的引擎,可以从QAbstractFileEngineHandler类继承

     

     

    展开全文
  • Qt 文件处理

    千次阅读 2012-03-29 16:13:57
    Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFile,获取文件信息可以使用QFileInfo ,处理目录可以使用QDir.监视...

    Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件,Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFile,获取文件信息可以使用QFileInfo
    ,
    处理目录可以使用QDir.监视文件和目录变化可以使用QFileSystemWatcher.

    读写文本文件
    QFile
    类提供了读写文件的接口,QFile类可以读写文本文件,二进制文件和Qt资源文件,也可以使用更方便的QTextStream,QDataStream类读取文本文件和二进制文件,要打开一个文件,可以在构造函数中指定文件名,也可以在任何时候使用setFileName()函数设置文件名,打开文件使用open函数,关闭文件使用close函数。QFile中可以使用QIODevice中继承的readLine()函数读写文本文件的一行。如:
      QFile file("zeki.txt");
      if(file.open(QIODevice::ReadOnly))
      {
          char buffer[2048];
          qint 64 lineLen=file.readLine(buffer,sizeof(buffer));
          if(lineLen!=-1)
          {
             qDebug<       }
      }
    如果读取成功,readLine返回实际读取的字节数,如果读取失败则返回-1
    QTextStream
    提供了更为方便的接口来读写文本,QTextStream可以操作QIODevice,QByteArray,QString.QTextStream使用流操作符,可以方便地读写单词,行和数字。为了产生文本,QTextStream提供了填充,对齐和数字格式化的格式选项。如
       QFile data("test.txt");
       if(data.open(QFile::WriteOnly|QFile::Truncate))
       {
            QTextStream out(&data);
            out<    }
      
    QTextStream
    的格式化函数
    ----------------------------------------------
    qSetFieldWidth(int width) 
    设置字段宽度
    qSetPadChar(QChar ch)     
    设置填充字符
    qSetRealNumberPrecision(int precision)
    设置实数精度
    ----------------------------------------------
    QTextStream中使用的默认编码是QTextCodec::codecForLocal()函数返回的编码,同时能够自动检测Unicode。也可以使用QTextStream::setCodec(QTextCodec *codec)函数设置的流编码。

    操作二进制文件
    QDataStream
    类提供了将二进制文件串行化的功能,QDataStream实现了c++基本数据类型的串行化,如char,short,int char*更复杂的数据类型串行化通过将数据类型分解为基本的数据类型来完成。下面用来写二进制数据到数据流。
    QFile file("binary.dat");
    file.open(QIODevice::WriteOnly);
    QDataStream out(&file);
    out< out<<(qint32)42<<(qint32)96;
    将上面写入的文件读入的过程为:
    QFile file("binary.dat");
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);
    QString str;
    qint32 x,y;
    in>>str>>x>>y;
    每一个条目都可以定义的二进制格式写入文件,Qt中的很多类型,包括QBrush,QColor,QDateTime,QFont,QPixmap,QString,QVariant等都可以写入数据流。

    如果需要读取原始数据,可以使用readRawData()读取数据到预先定义好的char *缓冲区,写原始数据使用writeData(),读写原始数据需要对数据进行编码和解码。
    下面例子演示了使用QDataStream进行读写文件的过程。
    #include
    #include
    using namespace std;
    int main(int argc,char **argv)
    {
       QCoreApplication app(argc,argv);
       QFile file("binary.file");
       file.open(QIODevice::WriteOnly|QIODevice::Truncate);
       QDataStream out(&file);
       out<    out<    out<<(qint32)21;
       file.close();
      
       file.setFileName("binary.file");
       if(!ifle.open(QIODevice::ReadOnly))
       {
          cout<<"
    打开文件错误!";
          return 1;
       }
       QDataStream in(&file);
       QString name;
       QDate birthday;
       qint32 age;
       in>>name>>birthday>>age;
          qDebug()<       cout<       qPrintable(birthday.toString("yyyy MMMM dd dddd"));
       file.close();
       return 0;
    }
    在例子中,QDataStream类写入了姓名(QString),生日(QDate),和年龄(qint32)三个数据,读取时使用相同的类型读出。QDataStream可以读取任意以QIODevice为基类生成的对象产生的数据。如QTcpSocket,QUdpSocket,QBuffer,QFile,QProcess等类的数据。可以使用QDataStreamQAbstractSocket一端写入数据,另一端使用QDataStream读取数据,这样就免去了繁琐的
    高低端字节转换过程。
    临时文件
    实际应用中有时可能需要使用临时文件,Qt中提供QTemporaryFile类来提供临时文件。QTemporayFile可以安全地创建一个第一无二的临时文件。临时文件通过open()来创建。Qt可以保证临时文件不会重复。在临时文件对象销毁后,将自动删除该临时文件。临时文件通过close()关闭后还可以打开,只要临时文件对象还没有销毁,临时文件就一直存在并由QTemporaryFile内部保持打开。系统的临时目录可以通过QDir::tempPath()来获取,unix/linux系统上的临时目录通常时/tempwindows上通常是TEM/TMP指定

     

     

    2.目录操作和文件管理
    QDir
    类具有存取目录结构和内容的能力。使用QDir可以操作目录,存取目录或文件信息,操作底层文件系统,而且还可以存取Qt的资源文件。Qt使用/作为通用的目录分割符和URL路径分隔符。Qt可以使用相对路径和绝对路径指向一个文件,isRelative()isAbsolute()函数可以判断QDir对象使用的是相对路径还是绝对路径。将相对路径转换为绝对路径使用makeAbsolute()函数。目录路径可以通过path()函数返回,通过setPath()函数设置新路径,绝对路径使用absolutePath()返回。目录名可以使用dirName()返回。目录的路径可以通过cd() cdUp()改变,可以使用mkdir()创建目录,rename()改变目录名。判断目录是否存在可以使用exists(),目录的属性可以使用 isReadable(),isAbsolute(),isRelative()isRoot()来获取,目录下有很多条目,包括文件,目录和符号链接,总的条目数可以使用count()来统计。entryList()可以返回目录下所有条目组成的字符串链表,文件可以使用remove()函数删除,rmdir()删除目录。
    linux du
    命令

    int main(int argc, char **argv)
    {
       QCoreApplication app(argc,argv);
       QStringList args=app.arguments();
       QString path;
       if(args.count()>1)
         path=args[1];
       else
         path=QDir::currentPath();
       qDebug()<    du(path);
       return 0;
    }
    qint64 du(const QString &path)
    {
        QDir dir(path);
        qint64 size=0;
        foreach(QFileInfo fileInfo,dir.entryInfoList(QDir::Files))
           size+=fileInfo.size();
        foreach(QString subDir,dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
           size+=du(path+Dir::separator()+subDir);
        char unit=\\\'B\\\';
        if(curSize>1024)
        {
           curSize/=1024;
           unit=\\\'K\\\';
           if(curSize>1024)
           {
              curSize/=1024;
              unit=\\\'M\\\';
              if(curSize>1024)
              {
                curSize/=1024;
                unit=\\\'G\\\';
              }
            }
         }
         cout<      return size;
    }
    函数du()中,entryInfoList(QDir::Files)函数返回文件信息,然后根据这些信息计算文件大小,接下来判断是否有子目录,如果有则递归计算。dir.etnryList(QDir::Dirs|QDir::NoDotAndDotDot)返回所有子目录并过滤掉. .. 目录。由于windows(),linux平台/ \差异,使用QDir::separator()函数来返回特定平台的目录分隔符。另外QDirIterator可以完成
    枚举目录的功能,Qt4.3还引入了文件搜索前缀的概念,文件搜索前缀时至少由两个字符组成,用来搜索指定文件的路径。
    QDir::setSearchPaths("docs",QStringList("c:\My Docments"));
    QDir::addSearchPaht("Docs",QStringList("D:|Documents"));
    QFile file("docs::qt4.doc");
    这样就可以在两个目录中查找。

    文件管理
    QFileInfo
    类提供了与系统无关的文件信心,它能提供文明名和路径,存取权限,以及文件是否为目录或符号链接,文件大小,以及最后修改/读取的时间等。QFileInfo也能从资源中获取信息。QFileInfo可以使用相对路径或绝对路径。文件名可以在QFileInfo的构造函数中传递,也可以使用setFile()函数指定,要判断一个函数是否存在,使用exits()函数,文件大小可以通过size()函数获取,文件类型可以通过isFile()isDir(),isSymLink()来获取,symLinkTarget()函数返回符号链接所指向的真正文件名。QFileInfo提供refresh函数刷新文件信息,如果需要QFileInfo每次从文件系统读取信息,二不是从缓存读取,可以使用setCaching(false)关闭缓存。文件名和目录可以通过path()fileName()分解,fileName()返回的部分可以通过baseName()extension()来获得主文件名和扩展文件名,文件的操作日期可以通过created(),lastModified()lastRead()获取,文件的存取权限可通国isReadable,isWriteable(),isExcutetable()获取,文件的属主可以通过owner(),ownerId,group(),groupId()获取,文件的权限和属主也可以通过 permission()一起读取。

    监视文件系统的变化
    Qt中可以使用QFileSystemWatcher类来监视文件和目录的改变.使用addPath()函数来监视指定的文件和目录,如果需要监视多个目录,使用addPaths()来加入监视,如果要一处不需要监视的目录,可以使用removePath(),removePaths()函数.当监视的文件被修改或删除时,产生一个fileChanged()信号,如果被监视的目录被修改或删除,产生directoryChanged()信号,下例实现了监视指定目录的功能.
    #include
    #include
    #include
    #Include"Msg.h"
    using namespace std;
    int main(int argc,char **argv)
    {
        QApplication app(argc,argv);
        QTextCodec::setCodecForTr(QTextCodec::codecForLocale())
       
        Msg msg;
        msg.show();
        return app.exec();
    }
    Msg::Msg()
    {
       QFont font;
       font.setPointSize(24);
       setFont(font);
       QStringList args=qApp->arguments();
       QString path;
       if(args.count()>1)
         path=args[1];
       else
         path=QDir::currentPath();
       label=new QLabel();
       label->setText(tr("
    监视的目录:")+path);
      
       QVBoxLayout *layout=new QVBoxLayout;
       layout->addWidget(label);
       setLayout(layout);
      
       fsWatcher.addPath(path);
       connect(&fsWatcher,SIGNAL(directoryChanged(QString)),this,SLOT(directoryChanged(QString)));
    }
    在构造函数中读取命令指定的目录作为监视目录,如果没有指定则监视当前目录,使用connect()函数将目录的directroyChanged()信号和响应函数连接.
    void Msg::directoryChanged(QString path)
    {
        QMessageBox::information(NULL,tr("
    目录变化"),path);
    }

    文件引擎
    Qt
    QtDir,QFile,QFileInfo类在内部都使用一个类,QAbstractFileEngine.通过继承QAbstractFileEngine,可以编写自己的文件处理函数,然后继承QAbstractFileEngineHander类注册自己的文件引擎,然后这样就可以使用自己的文件读取引擎了.QAbstractFileEngineHandler是创建QAbstractFileEngine的类工厂.当打开一个文件时,Qt通过内部注册的文件引擎链表,选择合适的文件引擎并创建相应的引擎对象.为了安装一个特定的文件引擎,必须继承QAbstractFileEngineHandler并实现create()函数.实例化引擎时Qt自动注册该引擎,最后注册的引擎比之前注册的优先级高.
    如果想读取tar文件的引擎,可以从QAbstractFileEngineHandler类继承
    class TarEngineHandler:public QAbstractFileEngineHandler
    {
        public:
            QAbstractFileEngine *create(const QString &fileName) const;
    };
    create()
    函数返回TarEngine对象,TarEngine是文件引擎,时真正的文件处理类.
    QAbstractFileEngine *TarEngineHandler::create(const QString &fileName) const
    {
        return fileName.toLower().endsWith(".tar")?new TarEngine(fileName):0;
    }

     

    我们使用自定义的二进制格式来实现Spreadsheet文件的保存和读取。我们用QFile和QDataStream这两个类来实现,它们一起提供了平台无关的二进制I/O。
    首先是保存文件的代码:
    bool  Spreadsheet::writeFile( const  QString  & fileName)
    {
        QFile file(fileName);
        
    if  ( ! file.open(QIODevice::WriteOnly)) {
            QMessageBox::warning(
    this , tr( " Spreadsheet " ),
                                 tr(
    " Cannot write file %1: %2. " )
                                 .arg(file.fileName())
                                 .arg(file.errorString()));
            
    return   false ;
        }
        QDataStream 
    out ( & file);
        
    out .setVersion(QDataStream::Qt_4_1);
        
    out   <<  quint32(MagicNumber);
        QApplication::setOverrideCursor(Qt::WaitCursor);
        
    for  ( int  row  =   0 ; row  <  RowCount;  ++ row) {
            
    for  ( int  column  =   0 ; column  <  ColumnCount;  ++ column) {
                QString str 
    =  formula(row, column);
                
    if  ( ! str.isEmpty())
                    
    out   <<  quint16(row)  <<  quint16(column)  <<  str;
            }
        }
        QApplication::restoreOverrideCursor();
        
    return   true ;
    }
    函数writeFile()由MainWindow::saveFile()调用,把文件保存到磁盘上。如果保存成功返回true,否则返回false。
    首先我们使用给定的程序名创建一个QFile对象,调open()打开这个文件准备写入。同时创建一个QDataSteam对象来操作QFile对象,将数据写入文件中。
    在写数据之前,我们将程序的光标换成等待形式,数据写完后恢复原来的鼠标形状。函数结束时,QFile的析构函数把文件自动关闭。
    QDataStream支持基本的C++类型,也支持多种Qt类型。语法和标准C++<iostream>类是一样的。例如:
    Out<<x<<y<<z;把变量x,y,z写入数据流。
    In>>x>>y>>z; 从数据流中读取数据到x,y,z中。在不同的平台上,基本的C++类型如short,char,int,long,long long会有不同的字长。最好把它们转换为qint8,quint8,qint16,quint16,qint32,quint32,qint64,quint64,这些类型能确保字长是不随平台改变的。
    Spreadsheet程序的文件格式非常简单。一个Spreadsheet文件开头部分是一个32位的标识数字(MagciNumber,在spreadsheet.h中定义的,一个二进制的随机数),这个数字后面是一系列的数据块,包括一个单元格的行号,列号和公式组成。为了节省空间,不保存空的单元格。
     
    数据类型的二进制表示由类QDataStream决定。如:quint16表示按big-endian顺序保存为两个字节。一个QString类型表示是字符串的长度后面接着Unicode码组成。
    自Qt1.0以来,Qt数据类型的二进制表示有了很大变化。在未来的Qt版本中还可能有更多的改变,默认QDataStream使用最近的Qt版本的二进制格式(version 7 in Qt 4.1),但是它可以读取以前的版本。为了程序用新的Qt版本重新编译后能够更好的兼容,我们显式的给出QDataStream使用的版本为7(QDataStream::Qt_4_1定义为常量7)
    QDataStream可以支持多种类型。如QFile,QBuffer,QProcess,QTcpSocket或者QUdpSocket。Qt还提供了类QTextStream能够读写文本文件。第12章详细介绍这些类。
    读取文件如下:
    bool  Spreadsheet::readFile( const  QString  & fileName)
    {
        QFile file(fileName);
        
    if  ( ! file.open(QIODevice::ReadOnly)) {
            QMessageBox::warning(
    this , tr( " Spreadsheet " ),
                                 tr(
    " Cannot read file %1: %2. " )
                                 .arg(file.fileName())
                                 .arg(file.errorString()));
            
    return   false ;
        }
        QDataStream 
    in ( & file);
        
    in .setVersion(QDataStream::Qt_4_1);
        quint32 magic;
        
    in   >>  magic;
        
    if  (magic  !=  MagicNumber) {
            QMessageBox::warning(
    this , tr( " Spreadsheet " ),
                                 tr(
    " The file is not a Spreadsheet file. " ));
            
    return   false ;
        }
        clear();
        quint16 row;
        quint16 column;
        QString str;
        QApplication::setOverrideCursor(Qt::WaitCursor);
        
    while  ( ! in .atEnd()) {
            
    in   >>  row  >>  column  >>  str;
            setFormula(row, column, str);
        }
        QApplication::restoreOverrideCursor();
        
    return   true ;
    }
     
    函数readFile()和writeFile()很相似。这次文件的打开方式为QIODevice::ReadOnly而不是QIODevice::writeOnly。设置QDataStream的版本为7。写文件和读文件的版本必须一致。
    如果文件的magic number号是正确的,调用clear()清空所有的表格,因为文件中只是保存了非空的单元格数据,不能保证所有的单元格都会被设置,所以必须确保再读取单元格数据前所有的表格要清空。
    展开全文
  • qt 网络复制文件

    2016-01-27 21:59:30
    QT4.7.3 VS2005平台 运用BAT文件 编译成VS工程文件 运用BOOST搜索文件,将单个文件或整个文件夹文件复制到另一个网络文件夹中
  • qt 文件操作 遍历所有文件夹下所有文件

    千次阅读 多人点赞 2019-08-30 14:47:02
    平时经常需要qt实现文件读取,每次都是直接百度需求,这里整理下用过的文件相关操作 平时主要参考这两位博客,有需求直接搜索,只要他们写过,问题一定很好解决( https://blog.csdn.net/feiyangqingyun 刘大神 ...
  • Qt文件操作总结

    千次阅读 2013-07-08 09:35:33
    Qt提供了QFile类来进行文件处理,为了更方便地处理文本文件或二进制文件Qt还提了QTextStream类和QDataStream类,处理临时文件可以使用QTemporaryFile,获取文件信息可以使用QFileInfo[喝小酒的网摘]...
  • Qt Creator文件添加助手

    2014-01-23 18:07:22
    个人觉得Qt Creator除了写程序外,用来看代码也是挺好的...因此写了这个Qt Creator文件添加助手,基本原理就是搜索源代码目录,然后将路径以以下形式添加到项目(*.pro)文件中: HEADERS += main.h SOURCES += main.cpp
  • Designer设计窗体,结合代码,对搜寻文件在规定路径下进行目录遍历
  • qt读取U盘文件

    千次阅读 热门讨论 2019-04-15 21:38:41
    那会儿一直搜索Qt如何识别U盘,最终得到的结果是Qt检测U盘插拔,发现并不是我想要的。 在开始前先看下Qt帮助文档的QStorageInfo类。 提供有关当前安装的存储和驱动器的信息 允许检索有关卷的空间,挂载点,...
  • 原文:https://www.cnblogs.com/softwareyy/p/6377408.htmlQt:在一个目录下查找指定文件/*函数功能:通过Qt实现在一个目录下查找指定文件 参数:strFilePath,要搜索的路径filename,要搜索的文件名*/void ...
  • qt 查找文件程序

    2015-12-22 12:07:21
    use qt to design for new learner
  • QTQt的pro文件

    千次阅读 2015-04-10 11:02:00
    Qt的.pro文件中有许多变量和函数,下面列举一些常用的。 两个连续的美元符号$$,可用来访问下面列出的变量,如$$SOURCES。代码注释以#开头。 SOURCES += xxx.cpp SOURCES声明.cpp文件。 HEADERS += xxx.h HEADERS...
  • 您可以通过将一些文件导入数据库并为它们添加标签来开始,然后可以搜索标签,它将弹出与该标签关联的所有文件 标签关系 您可以使标签互为别名,这样,如果您搜索一个标签,它也将搜索所有被别名的标签。 您还可以将...
  • * 遍历某个路径下所有文件夹,以及子文件夹,找到目标文件,写入到filedata中 * * @param * imode 0: 只会遍历子当前件夹 (默认) 1:会遍历所有的子文件夹 * @return bool */ bool findPathLoadFile(const ...
  • Qt pro 文件详解

    千次阅读 2016-07-15 08:57:43
    Qt pro 文件详解 1. TEMPLATE  变量TEMPLATE描述了为建立目标文件而采用何种模板,即生成何种形式的Makefile文件。Qmake  工具定义了5种模板:  a. 应用程序App,为建立一个Qt应用程序创建Makefile文件;  b. ...
  • QT FTP上传文件

    千次阅读 2019-08-06 13:58:07
    QT FTP上传文件两台电脑通过网线建立本地连接,保证网关在同一段;服务器端打开ftp;客户端网页测试远程访问;客户端cmd测试远程访问;客户端程序测试远程访问。 两台电脑通过网线建立本地连接,保证网关在同一段; ...
  • QT删除文件夹或者文件

    千次阅读 多人点赞 2019-08-04 22:05:01
      想用QT编一段文件夹或者文件的代码,网上搜索了很多,关于删除文件夹都用递归删除的方法,实际上QT5之后有更简便的方法,就是用QDir::removeRecursively(),详细的可以查QT帮助文档。  利用这个函数和QFile::...
  • Qt工程文件

    千次阅读 2012-05-04 09:51:43
    有时候需要手动修改工程文件,因此有必要理解其中一些常用变量的含义: 变量名 含义 TEMPLATE 模板,app代表应用程序,lib代表共享库 CONFIG 配置选项 QT
  • Qt 之自定义搜索

    万次阅读 多人点赞 2015-12-19 10:44:14
    当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定。 方案一:调用QLineEdit现有接口void addAction(QAction * action, ActionPosition position) 在QLineEdit的前/后添加部件,ActionPosition表示部件...
  • 这是一个利用qt qml 做的搜索安卓手机里面的.mp3文件并显示出来的
  • Qt加载QSS文件

    万次阅读 2016-09-22 16:30:00
    QSS:Qt Style Sheets简介QSS和CSS一样 通过样式表控制...创建QSS文件在帮助里搜索qt style,可以打开qss的使用例子 QApplication, QMainWindow, QFrame, QDockWidget, QDialog, QFileDialog, QMessageBox, QRadioButt
  • Qt——pro文件的使用&Qt调用dll

    千次阅读 热门讨论 2018-04-19 17:36:53
    搜索Qt Document   在搜索栏中输入pro file,即可看到.pro文件的所有相关文档 点击第二个链接,就可以看到pro文件的一些细节了。 当然,也可以在Qt Creator中找到document,只是可以搜索起来不是那么方便。...
  • QT 项目文件介绍

    千次阅读 2019-06-26 08:21:48
    项目(.pro)文件 先介绍一下QT中关于项目的相关介绍(以下摘自http://www.qtopia.org.cn/doc/qiliang.net/qt/qmake-manual-5.html) app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,389
精华内容 10,555
关键字:

qt文件搜索