当前位置:   article > 正文

【QT Creator学习记录】QDir, QFile, CSV文件 简单使用与代码示例_qt 生成文件名

qt 生成文件名

目录

一、QDir

1. 创建文件夹 mkdir()  mkpath()

2. 删除文件夹  rmdir() rmpath()

3. 重命名文件夹 rename()

二、QFlie

1. 创建文件 open(QIODevice::方式)

2. 判断文件是否存在 exists()

3. 删除文件 remove()

4. 重命名文件 rename(”newname“)

5. 复制文件 QFile::copy(”原地址,要复制的位置”)

6. 获取文件信息 QFileInfo

7. 写入文件 wirte() 、QTextStream()

8. 读取文件 QByteArray、 QTextStream

一、QDir

官方文档:

  • A QDir is used to manipulate path names, access information regarding paths and files, and manipulate the underlying file system. It can also be used to access Qt's resource system.
  • Qt uses "/" as a universal directory separator in the same way that "/" is used as a path separator in URLs. If you always use "/" as a directory separator, Qt will translate your paths to conform to the underlying operating system.
  • A QDir can point to a file using either a relative or an absolute path. Absolute paths begin with the directory separator (optionally preceded by a drive specification under Windows). Relative file names begin with a directory name or a file name and specify a path relative to the current directory.
  • QDir被用于操作路径名、访问相关的路径文件信息操作底层文件系统,也常被用于访问Qt资源系统
  • Qt使用”/“作为通用目录分隔符,就如同URLs中的路径分隔符一般。Qt会将带有”/“的路径转译,以便符合底层操作系统。
  • QDir可以指向相对或绝对路径。绝对路径以目录分隔符作为起始(可选:windows驱动器规范前);相对路径以目录名或文件名作为起始。
  • Examples of absolute paths:
  1. //绝对路径absolute path
  2. QDir("/home/user/Documents")
  3. QDir("C:/Users")
  4. //相对路径relative path
  5. QDir("images/landscape.png")

1. 创建文件夹 mkdir()  mkpath()

  • mkdir()方法:如果目录不存在,则创建一个新目录。

代码示例

  1. //创建对象
  2. QDir dir_1;
  3. //.标识当前当前文件夹
  4. //相对路径下创建名为csvFile的文件夹
  5. dir_1.mkdir("./csvFile");
  6. //exists()方法检测文件目录是否存在
  7. //检测是否有名为csvFile的文件,存在返回true,否则false。
  8. if(dir_1.exists("./csvFile")){
  9. qDebug()<<"文件目录已存在"<<endl;
  10. }

 运行结果:debug文件夹下生成对应文件

  •  mkpath()方法:如果csvFile目录的上级目录test不存在,直接创建test后创建csvFile,用于创建多级目录

代码示例

  1. QDir dir_2;
  2. dir_2.mkpath("./test/csvFile");
  3. if(dir_2.exists("./test/csvFile")){
  4. qDebug()<<"文件目录已存在"<<endl;
  5. }

 运行结果:

 

2. 删除文件夹  rmdir() rmpath()

  •  rmdir方法:删除指定文件夹,若文件夹不为空,删除失败
  1. QDir dir_3;
  2. dir_3.rmdir("./csvFile");
  • rmpath方法:删除指定多级文件夹,若文件夹不为空,删除失败
  1. QDir dir_3;
  2. dir_3.rmpath("./test/csvFile");
  • removeRecursively方法无论文件夹中是否存在文件,全部删除
    dir.removeRecursively("./test/csvFile");

3. 重命名文件夹 rename()

  • rename方法:旧文件夹名,新文件文件夹名。(带路径)
  1. QDir dirOld(oldPath);
  2. dirOld.rename(oldPath, newPath);

二、QFlie

官方文档:

  • QFile is an I/O device for reading and writing text and binary files and resources. A QFile may be used by itself or, more conveniently, with a QTextStream or QDataStream.
  • The file name is usually passed in the constructor, but it can be set at any time using setFileName(). QFile expects the file separator to be '/' regardless of operating system. The use of other separators (e.g., '\') is not supported.
  • You can check for a file's existence using exists(), and remove a file using remove(). (More advanced file system related operations are provided by QFileInfo and QDir.)
  • The file is opened with open(), closed with close(), and flushed with flush(). Data is usually read and written using QDataStream or QTextStream, but you can also call the QIODevice-inherited functions read(), readLine(), readAll(), write(). QFile also inherits getChar(), putChar(), and ungetChar(), which work one character at a time.
  • The size of the file is returned by size(). You can get the current file position using pos(), or move to a new file position using seek(). If you've reached the end of the file, atEnd()
  • QFile是用于读取与修改文本、二进制文件、资源的I/O设备。
  • 文件名通常在构造函数中pass,但它可以在任何时候通过setFlieName方法修改,文件路径用’/’分隔符分开,不支持其他符号。
  • 可以用exists方法检测文件是否存在,用remove方法删除文件。
  • 打开文件用open(), 关闭使用close(), 情况缓冲区数据用flush(),数据常常使用QDataStream或者QTextStream来读取修改,但你也可用QIODevice继承的方法,例如:read(), readLine(), readAll(), write()等等。
  • 使用size方法查看文件大小,获取当前文件位置使用pos方法。移动到新文件位置使用seek(),想跳转文件末尾用atEnd()

1. 创建文件 open(QIODevice::方式)

  •  open方法的打开方式:
QIODevice::ReadOnly以只读方式打开文件
QIODevice::WriteOnly只写方式
QIODevice::ReadWrite读写方式
QIODevice::Append追加模式打开,新写入文件的数据添加到文件尾部
QIODevice::Truncate截取方式打开文件,文件原有的内容全部被删除
QIODevice::Text文本方式打开文件,读取时“\n”被自动翻译为换行符
  • open里的打开模式为QIODevice::WriteOnlyQIODevice::ReadWriteQIODevice::Append这三种的话,文件不存在则会自动创建出一个空文件出来
  • 这些取值可以用“|”组合使用,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只读和文本方式打开文件。

代码示例

  1. QFile f("./test/xxx.csv");
  2. if(!f.open(QIODevice::Append))
  3. {
  4. qDebug()<<"创建成功啦"<<endl;
  5. }else{
  6. qDebug()<<"创建失败啦"<<endl;
  7. }

2. 判断文件是否存在 exists()

  • exists方法:存在返回true,否则false。
  1. QFile f("./test/xxx.csv");
  2. if(f.exists())
  3. {
  4. qDebug()<<"文件存在"<<endl;
  5. }else{
  6. qDebug()<<"文件不存在"<<endl;
  7. }

3. 删除文件 remove()

  • remove方法:成功true,失败false
  1. QFile f("./test/xxx.csv");
  2. if(f.remove())
  3. {
  4. qDebug()<<"删除成功"<<endl;
  5. }else{
  6. qDebug()<<"删除失败"<<endl;
  7. }

4. 重命名文件 rename(”newname“)

  1. QFile f("./test/xxx.csv");
  2. f.rename("新名称");

5. 复制文件 QFile::copy(”原地址,要复制的位置”)

    QFile::copy("./test/xxx.csv","./test/xxx2.csv");

6. 获取文件信息 QFileInfo

  • QFileInfo类创建对象info,将对象f 作为参数。

 代码示例

  1. QFile f("./test/xxx.csv");
  2. QFileInfo info(f);
  3. qDebug()<<"文件名"<<info.fileName()<<endl;
  4. qDebug()<<"基本名称"<<info.baseName()<<endl;
  5. qDebug()<<"后缀"<<info.suffix()<<endl;
  6. qDebug()<<"创建时间"<<info.birthTime()<<endl;
  7. qDebug()<<"大小"<<info.size()<<endl;

运行结果:

/*

件名 "xxx.csv"

基本名称 "xxx"

后缀 "csv"

创建时间 QDateTime(2023-09-27 15:45:01.484 中国标准时间 Qt::LocalTime)

大小 3

*/

7. 写入文件 wirte() 、QTextStream()

什么是CSV文件?

  • CSV文件以纯文本格式存储的表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号制表符。通常,所有记录都有完全相同的字段序列。
  • CSV全称Comma-Separated Values,即逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号。最常见的分隔符是逗号或制表符。CSV文件可以被认为是一个“平面文件数据库”。
  • CSV数据交换格式是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用,最常用于程序之间传输表格数据。大部分程序都支持某种CSV变体,至少是作为一种可选择的输入或输出格式。
  • CSV没有通用标准规范,不同的程序间CSV的标准有差异很常见,因此,术语“CSV”泛指具有以下特征的任何文件:
    • 纯文本,使用某个字符集,比如ASCII、Unicode、UTF-8或GB2312;
    • 由记录组成(典型的是每行一条记录);
    • 每条记录被分隔符分隔为字段
    • 每条记录都有同样的字段序列
  • CSV文件格式非常简单,被几乎所有的电子表格(如Excel、WPS、Numbers 表格)和数据库管理系统支持。许多编程语言都有可利用的库来支持CSV文件。
  • 写入方式2种,分别使用wirte() ,QTextStream()

代码示例

  1. //创建对象
  2. QFile f("./test/xxx.csv");
  3. //打开文件:以读写方式
  4. f.open(QIODevice::ReadWrite );
  5. //方式1
  6. QByteArray qba = "A,B,C,D,E,F,G\rG,F,E,D,C,B,A";
  7. f.write(qba);
  8. //方式2
  9. QTextStream qts(&f);
  10. QString str1="1,2,3,4,5,6,7";
  11. QString str2="1,2,3,4,5,6,7";
  12. QString str3="A,B,C,D,E,F,G";
  13. //endl为换行
  14. qts<< str1 <<endl << str2 <<str3;
  15. //关闭文件,否则文件会被锁定导致其他软件无法打开
  16. f.close();
  • 其中qba中”,“是字符分隔值\r为换行

运行结果如下:

/*

wirte() 方式写入:

QTextStream()方式写入:

*/

  • 可以看到str2与str3不换行, 会直接将7与A视为同一字段

8. 读取文件 QByteArray、 QTextStream

代码示例

  1. //方式1
  2. QByteArray array2 = f.readAll();
  3. qDebug() << array2;
  4. //方式2
  5. QTextStream in(&f);
  6. while (!f.atEnd()) {
  7. QString line = f.readLine();
  8. qDebug() << line;
  9. }

运行结果:

/*

方式1:

"1,2,3,4,5,6,7\n1,2,3,4,5,6,7\nA,B,C,D,E,F,G”

方式2:

"1,2,3,4,5,6,7\n" "1,2,3,4,5,6,7\n" "A,B,C,D,E,F,G"

*/

  • 方式1:可以看到readAll()直接都打印出来了,包括分隔符换行符,如果需要显示格式,需要循环遍历分隔符和换行符,也是使用readLine方法。
  • 方式2:QTextStreamatEnd()方法去做while循环可以一行行读数据,方便很多。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/652789
推荐阅读
  

闽ICP备14008679号