工作目录

遇到相对路径,我们肯定绕不过工作目录(working directory)。它有时也被称为当前工作目录(c urrent  w orking d irectory),所有的相对路径都是从工作目录开始解释的。 我们可以通过_chdir 等函数来更改进程的工作目录。

接前面的例子,如果你真的对工作目录没有感觉,不妨直接输出来自己看看(网络上你可能会看到其他posix等提供的函数,我们只使用ISO C++标准中的函数):

(1)我们调用 _getcwd 来获得当前的工作目录

(2)你可以在终端或cmd中切换到其他目录,通过绝对路径来调用你的这个程序,来观察输出

(3)如果你在linux下,你可以创建启动器,然后启动器中可以设置工作目录

(4)如果你在windows下,你可以为其创建快捷方式,快捷方式属性中可以设置/修改工作目录。

进程内修改工作目录

看个无聊的例子:

使用  _chdir   修改工作目录

现在,程序将去打开C盘temp目录下的文本文件

注:_chdir   和  _getcwd 都有对应的宽字符(wchar_t)版本,此处不涉及(如果你要使用宽字符,不妨先考虑看看此文C 源文件内的中文(2) )。

 

回到Qt

Qt 是C++的库,所以上面的东西你完全可以直接用。不过由于Qt提供更好用的东西QDir,我想你应该不会想着在Qt中使用前面提到的C、C++的中函数。

注意:如果你要操作的文件是只读的,而且程序编译完成后这些文件不需要变化,那么请首先考虑采用Qt的资源文件.qrc(本文不涉及这部分)。

下面:我们不妨看看前两个函数在Qt中的等价物。

获得工作目录

如果你对工作目录依然不熟悉,使用相对路径出现问题时,请首先考虑使用下列语句:

看看和你预想的是否相符。

修改工作目录

你很少需要这个操作

如果你用到了,请注意

而不是

程序所在目录 如何知道你程序自己在那个目录下,这是一个和平台相关的问题(ISO C、C++ 目前似乎还不能告诉我们答案)。幸好Qt提供了很好的封装了:

如果你想使用相对路径访问和可执行程序的同目录下的文件,你可以将工作目录设置成该目录!

或者(这应该是更好点的方法),用该目录和你的相对路径先直接组合成绝对路径再使用。

可是 ,你有没有这个问题:当我们在windows下使用Qt的时候,生成的可执行程序会在debug或release目录下,我们要访问的文件在 project.pro 文件所在目录(或其子目录)下。这可怎么办是好?

一个有用的函数

如果你想访问工程目录下的doc/dbzhang800.txt文件:

QFile(“doc/dbzhang800.txt”);好用么?如果在QtCreator 等环境下运行,一般可以工作,可是,进到debug下双击,却不工作了(不要告诉我你看了上面内容还不知道原因哈)。

问题的解决方案来自C++ GUI Qt4 编程一书,我相信你肯定见过这个函数:

这个函数怎么用?   我们只需要:

shadow build 

qmake 很早就提供shadow build功能,但也就QtCreator默认使用了该功能以后,大部分人才开始注意到它。

这儿没有神奇之处,只不过一般资料上介绍qmake都是这样说的:

make而 qtcreator 是这么做的

这种情况下,我们一般需要将一些文件拷贝到构建目录下,具体可参考  http://blog.csdn.net/dbzhang800/archive/2011/04/23/6343838.aspx 最后给的一段代码。

小结:本章主要讲述了从相对路径说开来,C++到Qt的过程,相信你也学到了不少。希望本篇文章对你有帮助!!!

 

转载自:http://mobile.51cto.com/symbian-269104_1.htm