• 5324阅读
  • 16回复

为什么我运行压缩命令没有成功 [复制链接]

上一主题 下一主题
离线lugaideath
 

只看楼主 倒序阅读 楼主  发表于: 2008-09-08
— 本帖被 XChinux 执行加亮操作(2008-09-10) —
我想直接用shell来压缩一些文件,代码如下:

QProcess::execute("zip -rj a.zip file/1/*");

但就说没有那file/1/*那文件路径,但我在终端执行那句是正常哦.

怎么解决???
离线zuogenyu

只看该作者 1楼 发表于: 2008-09-08
请你以后注意你的编程习惯,少用相对路径,或者正确使用相对路径.
先看这里 zip -rj a.zip file/1/*

你自己注意你的 file/ 是个相对路径

你再自己做个实验,假设你的file文件是在/opt/下.
你先cd /opt 再运行 zip -rj a.zip file/1/* 当然没错.但是.....

你现在运行下面的东西.
#cd ~
#zip -rj a.zip file/1/*
你就明白为什么了.
离线lugaideath

只看该作者 2楼 发表于: 2008-09-08
我可以说是没有问题,因为我是在项目的路径下的,程序运行以后,你写个测试命令pwd就可以看到默认路径就是程序所在的路径,我这样写是没有问题的,我在终端跑到那目录下运行我那压缩命令是很正常地执行的.

我也想过是不是相对和绝对路径的问题,但很明显并不是.
离线zuogenyu

只看该作者 3楼 发表于: 2008-09-08
你用绝对路径试过吗?
如果没有,试下吧
离线lugaideath

只看该作者 4楼 发表于: 2008-09-08
试过了!还是不行的!所以我才说这不是相对路径和觉得路径的问题啊!
离线zuogenyu

只看该作者 5楼 发表于: 2008-09-08
我还是觉得是路径问题.首先你也说了,报的错就是,同时终端中又是对的.
刚才帮你看了下.其中有句
The environment and working directory are inherited by the calling process.
不知道和这个有关不,由于不知道你用的是什么版本,所以无法帮你上机或者开发板试.
个人认为,正真的路径值得怀疑.
如果确实不行,看你是否考虑下 system();函数
离线lugaideath

只看该作者 6楼 发表于: 2008-09-08
我用绝对路径和相对路径的错误是一样,但自己跑到终端执行两个都是正确的,我是在fedora9上用QT4.4.1的!

system 还没有用过哦!该怎么写呢>
离线zuogenyu

只看该作者 7楼 发表于: 2008-09-08
哦,对了,我觉得是这样的.
QProcess::execute 虽然是个static函数,但是你是直接引用,而static又没有this指针,那么它怎么继承路径呢??由于你没有 new QProcess或者构造QProcess,你注意QProcess ( QObject * parent = 0, const char * name = 0 );
如果你在调用的时候构造或者new一个QProcess* ps ,这个时候路径才被赋值了.你再调用 ps->execute();我觉得才会得到你想要的结果.
离线lugaideath

只看该作者 8楼 发表于: 2008-09-08
应该不是这个问题吧,我每次调用firefox都是QProcess::execute("firefox www.baidu.com");都很正常地给我出结果啊,不过我不是用execute()这方法,因为这会阻塞掉我的应用,我是用startDetached()这方法的.
离线lugaideath

只看该作者 9楼 发表于: 2008-09-08
试了,结果还是一样的.
离线zuogenyu

只看该作者 10楼 发表于: 2008-09-08
因为你的firefox  在/bin 或者在 环境变量的path里可以找到, 所以你随便怎么firefox www.baidu.com都对.  如果不在环境变量里,同时你不用绝对路径的话,或者不CD到当前目录下的话,是运行不到firefox 的....同学.
离线zuogenyu

只看该作者 11楼 发表于: 2008-09-08
那我空了帮你试下,QT4XX的我这里有.
离线lugaideath

只看该作者 12楼 发表于: 2008-09-08
哦!麻烦了!
离线zuogenyu

只看该作者 13楼 发表于: 2008-09-08
就是运行 QProcess::execute("zip -rj a.zip file/1/*");吧???
其他的没要求了吧??
有的话发我Q上.
离线zuogenyu

只看该作者 14楼 发表于: 2008-09-08
搞定了,一会儿我把源代码发给你.
离线lugaideath

只看该作者 15楼 发表于: 2008-09-08
呵呵,谢谢楼上的,问题解决了
离线lugaideath

只看该作者 16楼 发表于: 2008-09-08
例子代码:(都是正确的)

#include <QtGui>
#include <QProcess>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
   
    QProcess::execute( "zip -rj a.zip file/1" );
    QProcess::execute( "zip -rj b.zip . -i file/1/*" );

    return app.exec();
}
快速回复
限100 字节
 
上一个 下一个