Qt 使用QProcess调用tar命令压缩文件
本文介绍了在Qt中使用QProcess调用tar命令进行文件压缩的方法。通过示例代码展示了如何实现基本压缩功能,并分析了两类常见问题:1) 压缩绝对路径文件时出现的路径斜杠警告,可通过添加-P参数或改用相对路径解决;2) 解压后出现多级目录问题,建议使用-C参数指定工作目录。文章还提供了两种替代方案:使用C++编写压缩功能DLL,或调用Qt高版本自带的QZipWriter类。这些方案可帮助开发者根
Qt 使用QProcess调用tar命令压缩文件
引言
QProcess是 Qt 框架提供的类,用于启动和控制外部程序。它允许通过异步或同步方式与子进程交互,支持读取/写入标准输入、输出及错误流,并监控进程状态。tar是 Unix/Linux 系统中用于归档文件的命令行工具,支持压缩与解压操作。解压时可能需要sudo权限,尽量避免使用绝对路径压缩。
一、QProcess调用tar命令压缩文件
QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
QFileInfo fileInfo(path);
QString tar_cmd = QString("tar -czf xx.tar.gz -C %2 %3").
arg(fileInfo.absolutePath()).arg(fileInfo.fileName());
process.start(tar_cmd);
if(!process.waitForStarted()){
qDebug() << process.errorString();
}
if(!process.waitForFinished(5000)){
qDebug() << QString("process time out: %1").arg(tar_cmd);
}
qDebug() << process.readAll();
二、遇到的问题及解决方案
2.1 警告:Removing leading `/’ from member names…
- 产生原因:该警告信息是tar命令在压缩绝对路径文件时的常见提示,表示自动移除了路径开头的斜杠
tar: Removing leading `//‘ from member names:https://www.cnblogs.com/shenweiyan/p/17449435.html
Linux压缩多个文件出现“removing leading / from member name”:https://zhuanlan.zhihu.com/p/26111416612
解决方案:1. 在命令中添加-P(大写)参数,明确允许保留绝对路径:tar -czPf2. 避免使用绝对路径,先进入文件所在目录再执行压缩:cd /home/xxx && tar -czvf xxx
2.2 压缩包中将路径也压缩进去了,解压缩之后需打开很多文件夹才能看到压缩的文件
- 产生原因:命令行中被压缩的文件使用了绝对路径 (/path1/path2/filename)
QT中QProcess调用命令行的痛苦经历:https://www.cnblogs.com/wangqiguo/p/4609228.html
在Linux中使用tar命令打包绝对路径的问题:https://blog.csdn.net/qq_44895681/article/details/123378183
tar 压缩使用绝对路径时解压会出现多级文件夹:https://blog.csdn.net/holly_Z_P_F/article/details/142589724
解决方案:1. 在命令中添加-C(大写)参数:tar -czf xxx.tar.gz -C /path1/path2 filename2. 避免使用绝对路径,先进入文件所在目录再执行压缩:cd /home/xxx && tar -czvf xxx
三、其他解决方案
- C++写一个dll实现,然后QT中调用
参考链接:QT中QProcess调用命令行的痛苦经历:https://www.cnblogs.com/wangqiguo/p/4609228.html - 使用高版本Qt,调用自带的
Qzipwriter对文件进行压缩
参考链接:Qzipwriter+QzipreaderQt自带压缩解压缩:https://blog.csdn.net/gitblog_06707/article/details/148276820
更多推荐


所有评论(0)