система ("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");