Я не могу перейти в каталог с C ++ - PullRequest
1 голос
/ 30 декабря 2010

Мне нужно изменить рабочую директорию моего проекта, чтобы выходные файлы попадали в определенную папку, а не туда, где находятся все файлы проекта.

Я использую

system("cd secretdir/");
system("ls");

Тем не менее, я получаю список файлов в текущем каталоге проекта, а не "secretdir".

Я нахожусь на Mac OS X 10.6 / Qt Creator 4.7 64 бит

Спасибо!

Ответы [ 7 ]

8 голосов
/ 30 декабря 2010

Вы должны изменить текущий рабочий каталог

http://www.linuxquestions.org/questions/programming-9/how-to-change-current-working-directory-in-c-550031/

Кроме того, вам следует рассмотреть возможность сохранения выходных файлов с полными путями вместо изменения рабочего каталога.

5 голосов
/ 30 декабря 2010

Ваш текущий код создаст подоболочку, которая изменит свой текущий каталог на ./secretdir, затем перейдет к exit(), не делая ничего другого.

Только тогда ls запустится в другой subshell, чей текущий каталог, конечно, полностью независим от того, что вы делали во время предыдущего вызова system().

Возможно, в этом и заключается ваша проблема.Вы ищете функцию chdir () ?

chdir("secretdir");
// From now on, the current directory of the process is `./secretdir`.
system("ls");  // Will probably behave as expected.
2 голосов
/ 30 декабря 2010

Я бы настоятельно рекомендовал проверять объекты QDir, QFile и QProcess в справке QT Creator или в онлайн-документации, поскольку вы ее используете.Они имеют очень подробную и простую для понимания документацию, и использование инструментов, доступных вам в QT, должно стать основной причиной выбора этого инструмента, так как многие из конкурентов QT повышают мобильность и удобство использования в моем ограниченном опыте.

Также естьбольшое сообщество по вопросам, связанным с QT, на QTForum , которое стоит добавить в закладки, особенно если QT Creator - ваша основная среда разработки.

Следует избегать использования system в качестве общего практического правила, оно неэффективно и небезопасново многих случаях.

РЕДАКТИРОВАТЬ: Извините, я слишком заглушил ваше первое предложение и перешел к битам кода.Вы можете изменить настройки проекта на вкладке Projects в QT Creator, чтобы добавить шаг Custom Process в сборку, где вы можете указать рабочий каталог, а затем выполнить команду копирования, куда бы вы хотели, чтобы ваш вывод шел.Вы также можете указать опцию вывода сборки в файле .pro напрямую ... еще раз, однако, справка и документация - ваш друг.

alt text

2 голосов
/ 30 декабря 2010

edit См. Ответ Фальмарри, когда я замаскировал первое предложение вашего вопроса.

Вы также можете использовать chdir

следующее жестоко

Первый system порождает новый процесс, который выполняет cd. Второй system порождает совершенно другой процесс, который не знает, что произошло ранее.

Одна вещь, которую вы могли бы сделать, это:

system("ls secretdir/");

1 голос
/ 30 декабря 2010

Использование system () не переносимо, поэтому старайтесь не использовать напрямую "cd", как это.Я советую использовать Boost файловую систему .

Существует Двухминутное руководство !

1 голос
/ 30 декабря 2010

Функция в Mac OSX - chdir("./secretdir"), хотя, поскольку это POSIX API, он фактически работает также и на многих других платформах.

0 голосов
/ 30 декабря 2010

Do

system("cd secretdir/; ls");

Или, что еще лучше, используйте библиотеку файловую систему . Может быть, просто opendir .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...