Как получить родительский каталог текущей папки в программе на C? - PullRequest
3 голосов
/ 08 марта 2011

Я пытаюсь получить родительский каталог текущей папки, в которой у меня есть программа. Мне нужно включить в программу на С, которая у меня есть. Я пытался сделать это с помощью строковых методов и решить, но я чувствую, что может быть лучше и проще. Например: если его путь «C: \ Application \ Config», то я хочу получить - «C: \ Application» просто родительский путь.
Может кто-нибудь помочь мне с этим?

Спасибо, Приянка

Ответы [ 4 ]

4 голосов
/ 08 марта 2011

Для усечения строки на месте последней обратной косой черты:

char pathname[MAX_PATH];
GetCurrentDirectory(MAX_PATH, pathname);
char* last_backslash = strrchr(pathname, '\\'); 
if (last_backslash)
{
    *last_backslash = '\0';
}
1 голос
/ 08 марта 2011

Трудно ответить на ваш вопрос, так как вы не указали, что вы хотите - сделать с путем, как только он у вас есть. Если вы хотите перейти в новый каталог, это легко, вы просто используете любую функцию, которую обычно используете для смены каталога, но передаете ее ".." вместо полного пути - это потому, что на всех вменяемых файловых системах ".." является «магическим» каталогом, который существует во всех других каталогах и ссылается на его родителя.

Если вы хотите выполнить какую-либо строковую функцию в новом каталоге, прежде чем переходить к нему, ваша проблема мгновенно становится намного сложнее решить. То, как я это сделаю, отражает решение RichieHindle - уберите текущий каталог из полного пути, после чего у вас останется путь к родительскому каталогу, который вы можете использовать для своего сердца.

1 голос
/ 08 марта 2011

Иногда достаточно просто добавить \.., если вы не боитесь MAX_PATH.

0 голосов
/ 08 марта 2011

В ОС Windows необходимая API-функция называется GetCurrentDirectory ().

http://msdn.microsoft.com/en-us/library/aa364934%28v=vs.85%29.aspx

...