система ("cd") в программе C


Я пытаюсь использовать функцию system () в программе на языке C.
Например, я попытался создать каталог на своем рабочем столе, используя функцию system ().
мой код:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   system("cd c:UsersUSERDesktop");
   system("mkdir test");
   return 0;
}

когда я запускаю этот код, каталог создается, но не на моем рабочем столе. Он создается в каталоге моего проекта.
Почему это происходит?
Можно ли использовать команду cd в функции system ()? Если нет, есть ли замена команде cd, которая будет работать с system()?

Я использую ОС Windows. Я пытаюсь использовать system () из программы C, как я использую программу cmd.
я знаю, что могу создать каталог с помощью WinAPI без каких-либо проблем. Я не хочу использовать WinAPI, мой вопрос в том, как я могу заставить его работать с помощью system().

3 ответов


измененный каталог длится только в течение действия системной команды. Команда запускает отдельную программу, которая наследует текущий каталог от вашей программы, но когда эта программа выходит из текущего каталога, умирает вместе с ней.

можно использовать && чтобы объединить команды вместе, и это будет работать:

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

Я также добавил /D switch, или команда CD не изменила бы букву диска, если бы она была вызвана из другого водить.

однако mkdir вполне способен принять полный путь, поэтому вы можете просто сделать:

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

когда вы говорите system("some shell command"); программа создает оболочку для выполнения команды. Оболочка имеет собственное представление о текущем каталоге, отдельно от вашей программы. Раковина!--1-->s в каталог, как вы просили, а затем умирает, оставляя CWD вашего процесса без изменений.

вы могли бы просто сказать _chdir("c:\Users\User\Desktop"); чтобы установить текущий каталог перед запуском команды" mkdir". Оболочка, которая порождает его для запуска, затем унаследует текущий каталог вашей программы и сделает папку в нужном месте.

(если на то пошло, вы могли бы сказать _mkdir("test"), а также прекратить использование system безосновательно. Вы должны только дотянуться до system когда вы пытаетесь сделать что-то, для чего стоит запустить внешнюю программу / оболочку.)


вы должны выполнять обе команды в одной строке, как это,

system("cd c:\Users\USER\Desktop && mkdir test");