Переносимая простая C-функция для извлечения имени файла из пути - PullRequest
1 голос
/ 18 апреля 2019

Я ищу портативный способ извлечь имя файла из строки пути в ANSI C.

Пути похожи на следующие:

C:\tmp\abc.txt

C:/tmp/abc.txt

c:/tmp\abc.txt

../abc.txt

c:tmp/abc.txt

c:abc.txt

abc.txt

./abc.txt

/home/user/abc.txt

/home/.././var/tmp/abc.txt

Для каждого случая я хочу извлечь "abc.txt"

Есть ли общее решение? (Я не нашел ни одного здесь и с Google)

1 Ответ

1 голос
/ 18 апреля 2019

В стандарте C нет ничего, что бы указывало на такую ​​функцию или требовало бы ее реализации для реализации.

Кроме того, невозможно реализовать ее самостоятельно, не адаптируя ее специально для целевой среды.Доказательство:

  • В системе Windows часть имени файла abc\def.txt равна def.txt.
  • В системе MacOS часть имени файла abc\def.txt равна abc\def.txt.

Поскольку надлежащий результат для идентичного ввода различен в разных системах, функция, независимая от синтаксиса имени файла для целевой среды, не может реализовать это.

Следовательно, любой такойФункция должна быть написана либо для конкретной реализации, либо для реализаций, либо должна учитывать и адаптировать себя к среде, для которой она скомпилирована.

Мне неизвестно о каком-либо программном обеспечении, обеспечивающем такую ​​функцию, которое не предназначено дляскажи, что такого не существует.

...