Если какой-либо API может извлечь имя файла из абсолютного пути к файлу?
например, "foo.txt"
из"/var/www/foo.txt"
Я знаю, что это работает со строковой операцией, как fullpath.replace(/.+\//, '')
но я хочу знать, есть ли более «формальный» способ, как file.getName()
в Java, мог бы это сделать.
NodeJS получить имя файла по абсолютному пути?
path.basename(fpath, path.extname(fpath))
Чтобы получить часть имени файла с именем файла, используется метод basename:
Если вам нужно имя файла без расширения, вы можете передать переменную расширения (содержащую имя расширения) методу basename, сообщив Node, что нужно возвращать только имя без расширения:
источник
Для тех, кто заинтересован в удалении расширения из имени файла, вы можете использовать https://nodejs.org/api/path.html#path_path_basename_path_ext
источник
Если вы уже знаете, что разделитель пути
/
(то есть вы пишете для конкретной платформы / среды), как следует из примера в вашем вопросе, вы можете оставить его простым и разделить строку по разделителю:Это было бы быстрее (и чище imo), чем замена регулярным выражением.
Опять же: Делайте это, только если вы пишете для конкретной среды, в противном случае используйте
path
модуль, так как пути на удивление сложны. Windows, например, поддерживает/
во многих случаях, но не для, например,\\?\?
префиксов стилей, используемых для общих сетевых папок и т.п. В Windows вышеуказанный метод обречен на провал, рано или поздно.источник
Дает вам имя файла без расширения, если вам нужно имя с расширением использования
источник
В NodeJS __filename.split (/ \ | //). Pop () возвращает только имя файла из абсолютного пути к файлу на любой платформе ОС. Почему нужно заботиться о запоминании / импорте API, в то время как этот подход к регулярным выражениям также позволяет нам вспомнить наши навыки регулярных выражений.
источник
Итак, Nodejs поставляется с глобальной переменной по умолчанию, которая называется
'__fileName'
текущим исполняемым файлом. Мой совет - передать __fileName службе из любого файла, чтобы извлечение fileName делалось динамическим.Ниже я использую строку fileName, а затем разделяю ее на основе
path.sep
. Обратите внимание, что path.sep позволяет избежать проблем с файловыми разделителями posix и файловыми разделителями windows (проблемы с '/' и '\'). Это намного чище. Получение подстроки и получение только последнего разделенного имени и вычитание его с длиной актуали на 3 говорит само за себя.Вы можете написать такой сервис (обратите внимание, что это машинописный текст, но вы можете написать его в js)
источник