Родительский каталог файла - PullRequest
5 голосов
/ 22 марта 2011

Есть ли способ узнать родительский каталог файла с помощью программы на Си.Я хотел бы дать те же разрешения для файла, который есть в каталоге.Чтобы сделать это, я хотел бы знать родительский каталог файла.Любая помощь приветствуется.

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

Если у вас есть путь к файлу, вы можете сделать это вручную, сделав его абсолютным путем, если он относительный (не начинается с / в Unix или letter:\ или \ илиletter:/ или / в Windows), а затем разделить его на символы разделителя файлов (/ или \), но я не знаю встроенной функции, которая сделает все это за вас.

Функции basename и dirname могут помочь, но вам нужно самостоятельно определить достаточный путь к файлу, так как они работают только со строками;они не опрашивают файловую систему.

3 голосов
/ 22 марта 2011

Это не гарантированно Правильно , но вы пробовали любое из следующего:

  • Если ваше имя файла содержит разделитель пути (например, / в Unix, \ в Windows), скопируйте строку, используя, например, strdup() и замените последний вхождение разделителя пути (найденное, например, strrchr()) символом нуля / нуля.Полученная строка будет родительским каталогом вашего файла.

  • Если разделитель пути отсутствует, файл находится в вашем текущем рабочем каталоге.Вы пробовали просто использовать .?Ссылки . и .. работают как в Unix, так и в Windows.

Выше приведено довольно много угловых примеров (например, что из файла /hello.txt?), Но этодолжно быть начало.

2 голосов
/ 22 марта 2011

В Standard C такой функции нет. Вы можете попытать счастья в Windows с: GetFullPathName http://msdn.microsoft.com/en-us/library/aa364963%28v=vs.85%29.aspx

и тогда может быть _splitpath http://msdn.microsoft.com/en-us/library/e737s6tf%28v=vs.80%29.aspx

Но, как написано, не существует стандартной функции для таких действий.

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