Под Windows 10 _chdrive также меняет каталог? - PullRequest
0 голосов
/ 17 октября 2019

Я не помню, чтобы предыдущие окна имели проблемы с _chdrive(), но использовали VS2008. При использовании версии от VS2017 он вызывает SetCurrentDirectoryW() с буквой диска. e.g. SetCurrentDirectoryW(L"D:"). Если я эмулирую не-Windows chdir() из DOS, где он только изменяет путь, а не диск, используя приведенный ниже код, где CWD D:\xyz\abc, и отправляю запрос на изменение пути на C:\whatever:

  int curdrv=_getdrive();
  if (_tchdir(path)!=0) {
    // err
  }
  _chdrive(curdrv);

если я тогда позвоню _tgetdcwd(0), то текущим каталогом будет D:\, а не D:\xyz\abc.

Я могу обойти это, что будет хлопотно, что-то сломалось или имеет _chdrive() всегда был сломан?

TIA !!

1 Ответ

0 голосов
/ 24 октября 2019

Проблема:

после замены на другой диск (здесь диск C), затем возврат на исходный диск с помощью _chdrive, текущий рабочий каталог изменяется . (Здесь он меняется с D:\Win32-Cases\ChangeDir\ChangeDir на D:\Win32-Cases\ChangeDir). Следующий снимок может показать эту проблему.

enter image description here

Поскольку вы просто меняете диск с помощью _chdrive (D:) вместо каталога. Поэтому последний каталог, возвращенный (D:\Win32-Cases\ChangeDir) из _tgetcwd, запоминается системой, но это не то, что _chdrive делает для вас.

Хотя каждый процесс может иметь только один текущий каталог, еслиприложение переключает тома с помощью функции SetCurrentDirectory, система запоминает последний текущий путь для каждого тома (буква диска) . Это поведение проявится только при указании буквы диска без полного пути при изменении текущей точки ссылки на каталог на другой том. Это относится к операциям Get или Set.

См. " Изменение текущего каталога ".

Если это правда, но почему он запоминает путь D:\Win32-Cases\ChangeDir вместо D:\Win32-Cases\ChangeDir\ChangeDir? Вот что мне нужно выяснить ...

Я хочу сказать, что _chdrive делает то, для чего он предназначен, основываясь на документе : Изменяет текущую работудиск .

Если вы хотите изменить каталог, используйте _chdir.

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