开发者

I can't go to a directory with C++

I need to change working directory of my project, so that output files go to a certain folder, not where all the project files are.

I'm using

system("cd secretdir/");
system("ls");

However, what I get, is the list of files in current project directory, not the "secretdir" one.

I'm on Mac OS X 10.6/Qt Creator 4.7 6开发者_开发技巧4 bit

Thanks!


You have to change the current working directory

http://www.linuxquestions.org/questions/programming-9/how-to-change-current-working-directory-in-c-550031/

Also, you should consider saving your output files with full path names instead of changing the working directory.


Your current code will spawn a subshell that will change its current directory to ./secretdir, then proceed to exit() without doing anything else.

Only then will ls run in another subshell, whose current directory is, of course, completely independent of what you did during your previous call to system().

That's probably where your problem lies. Are you looking for the chdir() function?

chdir("secretdir");
// From now on, the current directory of the process is `./secretdir`.
system("ls");  // Will probably behave as expected.


edit See Falmarri's response as I glossed over the first sentence of your question.

You can also use chdir

the following is crufty

The first system spawns a new process that does the cd. The second system spawns a completely different process that doesn't know what happened previously.

One thing you could do is:

system("ls secretdir/");


I'd highly recommend checking out QDir, QFile, and QProcess objects in the QT Creator help or online documentation since you are using it. They have very detailed and easy to understand documentation and using the tools available to you in QT should be a primary reason for choosing that tool much of QT rivals boost in portability and usability in my limited experience.

Also there is a great community for QT related questions at QTForum worth bookmarking especially if QT Creator is your primary development environment.

Using system should be avoided as general rule of thumb it is inefficient and insecure in many cases.

EDIT: Sorry I too glossed over your first sentence and jumped to the code bits. You can modify the project settings via the Projects tab in QT Creator to add a Custom Process step to the build where you can specify a working directory and then do a copy command to wherever you would like your output to go. You also may be able to specify a build output option within your .pro file directly ... once again the help and documentation is your friend however.

I can't go to a directory with C++


The function on Mac OSX is chdir("./secretdir"), although since it's a POSIX API it actually works the same on many other platforms as well.


Using system() is not portable so try to avoid to use directly "cd" like that. My advice is to use Boost filesystem.

There is a Two-minutes Tutorial !


Do

system("cd secretdir/; ls");

Or better yet use boost's filesystem library. Maybe just opendir.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜