_getcwd не возвращает текущий рабочий каталог, а вместо этого место, где хранится программа - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть программа, определенная в определенном каталоге A, и ярлык для нее в другом каталоге B, и я добавил B в PATH. В другом каталоге C я запускаю cmd.exe и выполняю эту программу с командой progname.lnk arg1 arg2. Насколько я понимаю, «текущим рабочим каталогом» в этой ситуации является C, но когда я использую _getcwd (см. Ниже) для получения текущего рабочего каталога, я получаю каталог A, место, где хранится программа.

#include <iostream>
#include <direct.h>
#define GCWD _getcwd

int main() {
  char cwd[256];
  GCWD(cwd, 256);
  std::cout << cwd << std::endl;
}

Я скомпилировал и запустил эту программу с командой mwe.lnk. Эта программа хранится в A, имеет ярлык для нее в B, и я запустил ее с C, точно так же, как моя настоящая программа.

Этот код получен от ответа computinglife на соответствующий вопрос. , который использует ту же технику здесь .

Правильно ли я понимаю, что «текущий рабочий каталог» является правильным? Кажется, это согласуется с первым абзацем ответа computerlife, так что я делаю не так?

1 Ответ

0 голосов
/ 03 апреля 2020

При создании ярлыков Windows настраивает их для задания рабочего каталога в том месте, где хранится программа. Очистка этого поля в свойствах ярлыка решила проблему.

...