Windows — Использование дерева команд в C ++ на C: //

Я хочу использовать команду дерева CMD Windows в моем консольном приложении C ++. Мой код:

system("cd c:/");
system("tree");

Проблема заключается в том, что дерево команд будет выполняться по пути к папке, в которой выполняется программа, а не на C: //. Есть ли способ это исправить?

0

Решение

Вы можете использовать SetCurrentDirectory из windows.h. На этой странице есть демонстрация:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363806%28v=vs.85%29.aspx

0

Другие решения

Почему бы и нет :

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.
1

Ваша проблема в том, что system("cd c:/") выполняется в оболочке, а затем оболочка завершается. [Это также неправильно, потому что вы используете неправильный вид слеша, это должно быть "cd c:\\" — двойная обратная косая черта необходима для создания одной обратной косой черты в выводе, если мы говорим о системе Windows].

Есть несколько способов сделать это:

  1. использование chdir() (или же SetCurrentDirectory) вызов функции для изменения основных процессов текущей рабочей директории, а затем вызов system("..."), Это самое простое решение.

  2. Сгенерируйте все ваши команды в командный файл, затем передайте командный файл system,

  3. Откройте командную оболочку с чем-то вроде _popen() и передать команды в канал, который вы получаете от этого.
  4. Вручную создайте каналы и подключите их к стандартному входу и выходу из процесса, запускающего командную строку.
0

Просто для программ в Windows включите «windows.h», затем

SetCurrentDirectory("c:/");
system("pwd");
0

Хотя мне все еще интересно, почему вы хотите это сделать, вы можете попробовать запустить все команды в одном system() вызов:

system("cd c: && c: && tree");

второй c: необходимо изменить букву диска, если вы в данный момент не находитесь на диске c: (так как cd не делает этого).

0