Я хочу использовать команду дерева CMD Windows в моем консольном приложении C ++. Мой код:
system("cd c:/");
system("tree");
Проблема заключается в том, что дерево команд будет выполняться по пути к папке, в которой выполняется программа, а не на C: //. Есть ли способ это исправить?
Вы можете использовать SetCurrentDirectory из windows.h. На этой странице есть демонстрация:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363806%28v=vs.85%29.aspx
Почему бы и нет :
system("tree c:\");
?
TREE [drive:][path] [/F] [/A]
/F Display the names of the files in each folder.
/A Use ASCII instead of extended characters.
Ваша проблема в том, что system("cd c:/")
выполняется в оболочке, а затем оболочка завершается. [Это также неправильно, потому что вы используете неправильный вид слеша, это должно быть "cd c:\\"
— двойная обратная косая черта необходима для создания одной обратной косой черты в выводе, если мы говорим о системе Windows].
Есть несколько способов сделать это:
использование chdir()
(или же SetCurrentDirectory
) вызов функции для изменения основных процессов текущей рабочей директории, а затем вызов system("...")
, Это самое простое решение.
Сгенерируйте все ваши команды в командный файл, затем передайте командный файл system
,
_popen()
и передать команды в канал, который вы получаете от этого. Просто для программ в Windows включите «windows.h», затем
SetCurrentDirectory("c:/");
system("pwd");
Хотя мне все еще интересно, почему вы хотите это сделать, вы можете попробовать запустить все команды в одном system()
вызов:
system("cd c: && c: && tree");
второй c:
необходимо изменить букву диска, если вы в данный момент не находитесь на диске c:
(так как cd
не делает этого).