qt

xiaoxiao2022-06-11  29

qt_文件管理

QDir,QFile

QDir

获取路径和进入文件夹,删除文件,文件夹

枚举

enum Filter { Dirs, AllDirs, Files, Drives, …, CaseSensitive } flags Filters enum SortFlag { Name, Time, Size, Type, …, LocaleAware } flags SortFlags

函数描述QString absoluteFilePath(const QString &fileName) const返回文件的绝对位置+文件名,不检查是否存在,exist去检查就好QString absolutePath() constQDir的绝对路径QString dirName() const返回dir路径名QString filePath(const QString &fileName) const返回路径名QString path() const路径QString relativeFilePath(const QString &fileName) const返回路径名int count()const返回的是该目录下文件夹和文件的数量+./+../QFileInfoList entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const每一个文件或者文件的对象列表QStringList entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const文件和目录的名称列表QDir::SortFlags sorting() const返回排序的规律QDir home()QString homePath()QDir root()QString rootPath()QDir temp()QString tempPath()
判断
函数描述bool isAbsolute() const绝对位置bool isEmpty(QDir::Filters filters = Filters(AllEntriesNoDotAndDotDot)) constbool isReadable() const可读bool isRelative() const相对位置bool isRoot() const根目录bool exists(const QString &name) constbool exists() const存在
操作
函数描述bool cd(const QString &dirName)bool cdUp()bool mkdir(const QString &dirName) const创建目录bool mkpath(const QString &dirPath) const创建一长串的目录void refresh() const刷新bool remove(const QString &fileName)删除文件bool rename(const QString &oldName, const QString &newName)重命名bool rmdir(const QString &dirName) const删除目录bool rmpath(const QString &dirPath) const删除多个目录void setSorting(QDir::SortFlags sort)设置排序void setFilter(QDir::Filters filters)设置过滤器void setNameFilters(const QStringList &nameFilters)void setPath(const QString &path)设置path /* * get information * absoluteFilePath("hz1.jpg")返回文件的绝对路径的名字 * absolutePath()返回dir绝对路径 * dirName()返回dir的名字 * count()返回文件及./ ../的数量 * * dispose dir * cd cdUp mkdir mkpath * */ FileIo::FileIo(QWidget *parent) : QWidget(parent) { setWindowTitle("file system"); QDir file_dir("E:/qttest/testqrc"); //获取信息 if(file_dir.exists("hz1.jpg")) qDebug()<<file_dir.absoluteFilePath("hz1.jpg");//假如存在就会输出E:/qttest/hz10.jpg,但是这文件的 //地址是E:/qttest/testqrc/hz10.jpg,慎用 // qDebug()<<file_dir.absolutePath(); //绝对路径名 // qDebug()<<file_dir.dirName(); //路径名 // qDebug()<<file_dir.count(); //文件数量 allFile("E:/newfile1"); //文件的属性 rmAll("E:/newfile1"); //操作 //file_dir.mkpath("E:/newfile1/newfile2/newfile3"); //可以创建多个新文件夹 //file_dir.mkdir("E:/1"); //创建一个 //file_dir.rmpath("E:/newfile1/newfile2/newfile3"); //删除空文件夹多个 //file_dir.rmdir("E:/1"); //file_dir.setPath("E:/newfile1"); }

QFileInfo

提供一系列文件信息,前缀,后缀,大小,创建时间…..相当于文件的属性,详细信息

函数描述QDir absoluteDir() const绝对位置的DirQDir dir() const返回dirQString absoluteFilePath() const路径名QString path() const路径名QString absolutePath() constQString baseName() const名称第一部分QString suffix() const文件后缀qint64 size() const大小QDateTime birthTime() const创建时间QDateTime lastModified() const最后修改时间QDateTime lastRead() const最后访问时间QDateTime metadataChangeTime() const比如权限被修改时间bool permission(QFile::Permissions permissions) const是否具有文件权限QFile::Permissions permissions() const文件的权限QString owner() const文件属于谁uint ownerId() const文件主的idQString bundleName() const包名称bool caching() const是否为缓存QString canonicalFilePath() const链接路径QString canonicalPath() const链接路径QString completeBaseName() const文件名称,去掉后缀QString completeSuffix() const文件后缀,去掉第一部分也就是文件名称bool exists() const判端是否存在QString fileName() const文件的名称QString filePath() const文件的路径QString group() const文件的组名称,unix里面uint groupId() const文件的组的idbool isAbsolute() const是否为绝对路径bool isBundle() const是否为包bool isExecutable() const可执行bool isReadable() const可读bool isWritable() const可写bool isFile() const文件,而不是目录bool isDir() const是否为目录bool isHidden() const隐藏文件bool isNativePath() const本地文件,而不是资源文件下的东西bool isRelative() const相对文件,在资源文件下,或者默认目录下的bool isRoot() const根bool isSymLink() const是否链接文件QString symLinkTarget() const链接文件的名字void refresh()刷新文件的信息void setCaching(bool enable)设为缓存void setFile(const QString &file)设置文件void setFile(const QFile &file)void setFile(const QDir &dir, const QString &file)

void readAllFile(const QString & path) { QTextStream cout(stdout); cout.setFieldWidth(20); cout<<endl; cout.setFieldAlignment(QTextStream::AlignLeft); QDir dir(path); if (!dir.exists()) return ; QFileInfoList list = dir.entryInfoList(QDir::Files|QDir::Dirs,QDir::Time); int i = 0; do{ QFileInfo fileInfo = list.at(i); if(fileInfo.fileName()=="." | fileInfo.fileName()=="..") { i++; continue; } bool bisDir = fileInfo.isDir(); if(bisDir) { readAllFile(fileInfo.filePath()); } else { cout<<fileInfo.path()<<fileInfo.fileName()<<fileInfo.created().toString ("yyyy-MM-d h:m:s")<<fileInfo.size()/(1024.0)<<"\n"; } i++; }while(i < list.size()); } void rmAllFile(const QString &path) { QDir dir(path); if (!dir.exists()) return ; QFileInfoList list = dir.entryInfoList(QDir::Files|QDir::Dirs,QDir::Time); int i = 0; do{ QFileInfo fileInfo = list.at(i); if(fileInfo.fileName()=="." | fileInfo.fileName()=="..") { i++; continue; } bool bisDir = fileInfo.isDir(); if(bisDir) { rmAllFile(fileInfo.filePath()); } else { dir.remove(fileInfo.absoluteFilePath()); } i++; }while(i < list.size()); dir.rmpath(path); }

QFile

函数描述bool copy(const QString &newName)赋值bool link(const QString &linkName)链接bool remove()删除bool open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)打开void setFileName(const QString &name)设置名字bool rename(const QString &oldName, const QString &newName)重命名 QFile file("in.txt"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; while (!file.atEnd()) { QByteArray line = file.readLine(); process_line(line); } /* * Qfile取得一个文件的地址,然后对文件进行操作 * rename copy 写入 读出 */ FileIo::FileIo(QWidget *parent) : QWidget(parent) { setWindowTitle("file system"); QFile file("E:/1.txt"); QTextStream out(&file); QTextStream cout(stdout); file.open(QFile::ReadWrite|QFile::Text); out<<"myname is zyldcsdfcsdfcsdg"<<endl; cout<<file.readAll(); file.close(); }

QTextStream

text的流,相同的data流也存在

函数描述bool atEnd() const流指针是否在末尾qint64 pos() const流指针位置QString read(qint64 maxlen)读文件QString readAll()读文件QString readLine(qint64 maxlen = 0)读文件void reset()充值流默认设置void resetStatus()重置流状态bool seek(qint64 pos)跳转void setCodec(QTextCodec *codec)设置编码格式void setCodec(const char *codecName)void setDevice(QIODevice *device)设置设备void setFieldAlignment(QTextStream::FieldAlignment mode)对齐方式void setFieldWidth(int width)宽度void setGenerateByteOrderMark(bool generate)会插入bom标记void setIntegerBase(int base)进制设置void setNumberFlags(QTextStream::NumberFlags flags)设置标志void setPadChar(QChar ch)空白填充void setRealNumberPrecision(int precision)设置小数的位数void setStatus(QTextStream::Status status)流状态

status:

函数值描述QTextStream::Ok0The text stream is operating normally.QTextStream::ReadPastEnd1The text stream has read past the end of the data in the underlying device.QTextStream::ReadCorruptData2The text stream has read corrupt data.QTextStream::WriteFailed3The text stream cannot write to the underlying device. /* * QtextStream相当于c++的iostram * pos位置 seek跳转 atend是否末尾 * */ FileIo::FileIo(QWidget *parent) : QWidget(parent) { setWindowTitle("file system"); QFile file("E:/1.txt"); QTextStream out(&file); QTextStream cout(stdout); file.open(QFile::ReadWrite|QFile::Text); if(out.atEnd())cout<<"this is end\n"; cout<<"pos:"<<out.pos()<<endl; //位置 out.setCodec("utf-8"); //编码 out.seek(0); //跳转位置 cout.setIntegerBase(10); //输出控制,二进制 cout.setRealNumberPrecision(2); //小数的位数是2,最多是2 cout<<out.readAll()<<endl; cout<<out.device()<<endl; cout<<bin<<5023.5/1024.0; file.close(); }
转载请注明原文地址: https://www.6miu.com/read-4931992.html
最新回复(0)