U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > U盘常识 >

二、各模块的基本实现——2. 基于QT+树莓派实现csv文件的写入并拷贝至U盘

来源:http://www.tudoupe.com时间:2022-02-09

各模块的基本实现——2. 基于QT+树莓派实现csv文件的写入并拷贝至U盘

本专题导航,Click Me

文章目录

  • 各模块的基本实现——2. 基于QT+树莓派实现csv文件的写入并拷贝至U盘
  • 前言
  • 一、csv文件的写入
  • 二、将文件拷贝至U盘
    • 1.检测U盘插入
    • 2.挂载U盘
    • 3.拷贝文件
    • 4.重命名文件夹
    • 5.卸载U盘
    • 6.主要代码
  • 总结

前言

这篇文章进一步实现csv文件的创建与写入,并存入U盘。更具体的功能说明如下:

  1. csv文件的名称以当前时间命名,具体格式为:yyyyMMdd_hhmmss(年月日_时分秒);
  2. 可以实现csv文件多行多列内容的写入;
  3. 可自动检测到有U盘插入,并将所有.csv文件拷贝至U盘,文件夹同样以上述格式的当前时间命名,拷贝完成后,在QT界面中提示用户:“文件拷贝完成,可拔出U盘”。

因为在第一章中我们已经完成了交叉编译环境的配置,后面的程序开发均是在PC端的Ubuntu18.04环境下,并将可执行文件放在树莓派上执行。

一、csv文件的写入

csv是逗号分隔值的英文缩写,csv文件是一种用来存储数据的纯文本文件。对csv文件进行的写入主要用到了QT的QFile和QTextStream类,其使用可查看官方的帮助文档,都有相对详细的描述。除了库函数的使用之外,还需要注意两点:

  1. 编码格式
    编码格式可用QTextStream::setCodec函数设置,本文设置为“UTF-8”。在Ubuntu中用LibreOffice打开该编码格式的csv文件时,选择相应的编码格式(UTF-8)不会出现乱码的问题,在windows下用excel直接打开时会出现乱码,因为excel是ANSI编码,而csv文件是UTF-8编码,如下图导入即可显示正常。
    在这里插入图片描述
  2. 分隔符
    在进行多行多列写入时,需要首先清楚csv文件的行列分隔符。列分隔符为逗号,即“,”;行分隔符为“rn”。

清楚csv文件的基本概念、QT相关类的使用和注意事项之后,就可以写代码了。这里贴一个代码实现,放在“新建文件”按钮触发的槽函数中。

其中,表头和工作路径是定义在mainwindow.h文件中的MainWindow类中的私有变量,定义如下:

二、将文件拷贝至U盘

1.检测U盘插入

U盘属于SCSI硬盘,在linux中被表示为“sdx~”。其中“sd”表示设备类型为SCSI硬盘,“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用1~4表示,它们是主分区或扩展分区,从5开始是逻辑分区。
U盘插入后,/dev路径下会出现sd开头的文件,比如sda和sda4(也有可能是sdb和sdb4等等)。我们就根据这个特点去在程序中做U盘插入的检测。在terminal中输入:

可在/dev文件夹下找到所有sd开头的文件,如下图。
在这里插入图片描述
现在我们已经可以用命令行检测U盘是否插入了,下一步就是在QT中实现检测。QT中的QProcess类可以帮助我们开启一个进程并通过命令行执行相应的操作,相关代码如下:

2.挂载U盘

假设U盘对应的标识符为sda4,实现挂载U盘至linux文件系统(本文挂载至/home/pi/MountUSB)的命令行是:

其中mount命令的第一个参数应为U盘对应的标识符,可以从上一步命令行返回的内容(ret)中提取;mount命令的第二个参数是挂载的目录,这里设置为/home/pi/MountUSB。
注:需要提前在/home/pi/路径下创建MountUSB文件夹。

3.拷贝文件

文件拷贝用的是命令cp,由于这里是直接拷贝文件夹(其中包括所有的csv文件),需要参数-r实现递归拷贝。命令行代码为:

其中,命令cp的第一个参数为csv文件存放的路径,第二个参数为U盘挂载的路径,实现将所有csv文件(整个文件夹)拷贝至U盘。

4.重命名文件夹

文件(夹)重命名所用命令为mv,假设当前时间为2022年2月8日,22:18:50,则命令行代码为:

其中,命令mv的第一个参数为拷贝至U盘的文件夹路径;第二个参数为将文件夹重命名为当前时间后的文件夹路径。

5.卸载U盘

完成文件拷贝后即可卸载U盘,所用命令为umount,命令行如下:

其中,命令umount的参数为U盘对应的标识符,同样从1.检测U盘插入中命令行返回的内容(ret)中提取得到。

6.主要代码

拷贝文件至U盘相关的代码放在定时器溢出信号触发的槽函数中,即定时检测U盘是否插入,若插入则执行:

  1. 挂载U盘
  2. 拷贝文件
  3. 重命名文件夹
  4. 卸载U盘
  5. 提示用户“文件拷贝完成,可拔出U盘”

说明:提示用户“文件拷贝完成,可拔出U盘”的实现主要用到函数QMessageBox::information,用户需要点击“OK”,程序才可继续运行。

实现上述功能的主要代码如下:

总结

最开始在实现检测U盘插入的时候考虑过单独编写shell实现检测,再将检测结果通过进程间通信“告诉”QT。但发现实现U盘的检测并不复杂,且未找到较为简便的进程间通信方法,最终用QProcess类实现了该功能。如果有更好的实现方式欢迎交流~

✿✿ヽ(°▽°)ノ✿

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息