В чем разница между _chdir и SetCurrentDirectory в Windows? - PullRequest
9 голосов
/ 25 сентября 2011

Есть ли какая-то разница в том, что я должен выбрать один над другим?

Ответы [ 3 ]

10 голосов
/ 25 сентября 2011

Они достигают одного и того же результата, но принадлежат к различным API, поэтому они возвращают свои результаты и сообщают об ошибках по-разному.

Если вы уже используете другие подпрограммы из любого API, выберите эту. Если нет, SetCurrentDirectory () более «Windowsy», а _chdir () больше похож на POSIX API. Если вы хотите портировать код, скажем, на платформу Linux, используйте _chdir (); если вы знаете, что когда-либо будете запускать код только на платформах Windows, SetCurrentDirectory ().

6 голосов
/ 25 сентября 2011

_chdir фактически использует SetCurrentDirectory внутри, поэтому в большинстве случаев они эффективно взаимозаменяемы.Однако _chdir делает еще одну вещь: он обновляет текущий каталог текущего диска, хранящийся в переменной окружения.Это необходимо, как отмечается в примечании _tchdir, потому что «другие функции (fullpath, spawn и т. Д.) Требуют их установки».

Я не уверен, насколько это необходимо в наши днино я бы сказал - если вы используете эти функции в стиле POSIX для файловых операций, манипулирования путями, создания процессов и т. д., используйте _chdir соответственно.Если вы используете функции Win32 API напрямую, используйте SetCurrentDirectory.

0 голосов
/ 25 сентября 2011

SetCurrentDirectory - это макрос, который преобразуется в SetCurrentDirectoryA или SetCurrentDirectoryW в зависимости от настроек сборки. Системный макрос для _chdir и _wchdir отсутствует.

На странице MSDN для SetCurrentDirectory указано, что аргумент может быть относительно текущего рабочего каталога или абсолютным. Документация для _chdir никоим образом не говорит, хотя кажется, что она Может ли chdir () принимать относительные пути? в Linux.

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