这两天在工作遇到要拷贝文件的功能,直接用QFile 的copy()功能拷贝文件速度太慢,所以想到用shell脚本来实现文件copy。需要点击界面上的一个button,执行拷贝文件的脚本,并且将待拷贝文件的文件名 作为参数传递到脚本中。在网上参考了相关的方法,然后实现了这个功能,这里总结一下。
1.点击按钮实现执行脚本功能
在Qt中点击按钮关联到执行脚本,使用QProcess 来完成。
本例中代码如下:
void UpgradeProgressBar::copyFileToDst()
{
QProcess *tpuProcess = new QProcess();
QString commandProgram = "./copyFile.sh"; //commandProgram 这个变量是待执行脚本的完整路径
QStringList args;
args.append(mFileName); //mFileName 是待复制的文件名,作为参数传递给copyFile.sh文件,如果还有其他参数,可以往后加args.append(XX)
tpuProcess->start(commandProgram,args); //启动执行脚本文件
}
2.脚本接收Qt中传递的参数
copyFile.sh文件代码如下:
#! /bin/sh
touch testfile.txt
echo "I have $# parameter!"
echo "First parameter is: $0" >> testfile.txt
echo $0 >> testfile.txt
echo $1 >> testfile.txt
cp $1 /mnt/udisk/
#echo '12345678'| sudo -S cp $1 /mnt/udisk/
echo "Copy file finish!"
其中:
$# 表示传递参数的个数
$0 表示第0个参数,一般为./XX.sh
$1表示第一个参数,这里为mFileName(传递给脚本的文件名)
$2、 $3... 表示./XX.sh跟在后面的参数。