system(“cd <path>”) in a C program

爷,独闯天下 提交于 2019-11-26 18:00:47

The changed directory only lasts for the duration of the system command. The command starts a separate program, which inherits its current directory from your program, but when that program exits its current directory dies with it.

You can use && to join the commands together, and it will work:

system("cd /D C:\\Users\\USER\\Desktop && mkdir test");

I also added the /D switch, or the CD command would not change drive letter if it were called from a different drive.

However, mkdir is perfectly capable of accepting a full path, so you could simply do:

system("mkdir C:\\Users\\USER\\Desktop\\test");

When you say system("some shell command");, the program spawns a shell to run the command. The shell has its own idea of the current directory, separate from your program's. The shell cds to the directory just as you asked it to, and then dies, leaving your process's CWD unaffected.

You could simply say _chdir("c:\\Users\\User\\Desktop"); to set the current directory before running the "mkdir" command. The shell that spawns to run it will then inherit your program's current directory and make the folder in the right place.

(For that matter, you could say _mkdir("test") as well, and stop using system unnecessarily. You should only reach for system when you're trying to do something that's worth running an external program / shell for.)

You have to perform both the commands on a single line like this,

system("cd c:\\Users\\USER\\Desktop && mkdir test");
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!