Дано имя файла необходимо вывести его расширение

Обновлено: 03.07.2024

У меня есть список файлов, хранящихся в .log в этом синтаксисе:

Я хочу извлечь имя и расширение из этих файлов. Можете ли вы привести пример простого способа сделать это?

ОТВЕТЫ

Ответ 1

Чтобы извлечь имя файла без расширения, используйте boost:: filesystem:: path:: stem вместо уродливого std::string:: find_last_of ( "." )

Ответ 2

Если вам нужен безопасный способ (т.е. переносимый между платформами и не устанавливающий предположения на пути), я бы рекомендовал использовать boost::filesystem .

Это выглядело бы так:

Затем вы можете извлечь различные данные с этого пути. Здесь документация объекта пути.

Кстати: Также помните, что для использования пути, типа

вам нужно избежать \ в строковом литерале:

Или используйте / вместо этого:

Это относится только к заданию литеральных строк в кавычках "" , проблема не возникает при загрузке путей из файла.

Ответ 3

Вам нужно будет прочитать ваши имена файлов из файла в std::string . Вы можете использовать оператор извлечения строки std::ostream . Когда у вас есть имя файла в std::string , вы можете использовать метод std::string::find_last_of , чтобы найти последний разделитель.

Что-то вроде этого:

Ответ 4

Не код, но вот идея:

  • Прочитайте std::string из входного потока ( std::ifstream ), каждый прочитанный экземпляр будет полным путем
  • Сделайте find_last_of в строке для \
  • Извлеките подстроку из этой позиции до конца, теперь она даст вам имя файла
  • Сделайте find_last_of для . , а подстрока с обеих сторон даст вам имя + расширение.

Ответ 5

Для С++ 17:

Как было предложено @RoiDanto, для форматирования вывода std::out может окружать вывод с помощью котировок, например:

Вы можете преобразовать std::filesystem::path в std::string на p.filename().string() , если это вам нужно, например:

Ответ 6

Я также использую этот фрагмент, чтобы определить соответствующий символ косой черты:

а затем замените косые черты на предпочтительную косую черту для ОС. Полезно, если вы постоянно развертываете Linux/Windows.

Ответ 7

Для Linux или Unix-устройств os имеет две функции, связанные с именами путей и файлов. используйте man 3 basename, чтобы получить дополнительную информацию об этих функциях. Преимущество использования предоставляемой системой функциональности заключается в том, что вам не нужно устанавливать boost или писать собственные функции.

Пример кода с man-страницы:

Из-за типа аргумента non-const функции basename() это немного не прямолинейно, используя этот код внутри С++. Вот простой пример из моей базы кода:

Использование нового/удаления не является хорошим стилем. Я мог бы положить его в попытку/поймать блок в случае, если что-то произошло между двумя вызовами.


В этой статье мы подробно расскажемь, как заставить Windows показывать расширения всех типов файлов, и в каком случае это может понадобиться.

Мы опишем два способа, первый подходит для «Windows 7», «Windows 8 (8.1)» и «Windows 10», а второй только для «Windows 8 (8.1)» и «Windows 10», но он более быстрый и самый удобный.

Расширение имени файла (сокращённо: расширение файла или расширение) — это идентификатор файла, представляющий собой последовательность буквенных символов и цифр, добавляемых к имени файла, и предназначенных для определения типа файла. Расширение помогает операционной системе определить тип данных, хранящихся в файле (текстовый документ, изображение, видеофайл и т.д.), и выбрать необходимое программное обеспечение для работы с ним. Это один из самых распространённых способов указать системе, какой файл используется в какой программной среде. В некоторых случаях файл сам является программой, о чем операционная система также узнает из расширения имени файла.

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

Расширение имени файла обычно отделяется от основного названия файла точкой. Длина расширения файлов составляет от двух до четырёх символов и может включать только буквы («.ai», «.pdf», «.docx») или сочетание букв и цифр («.mp3», «.m4v», «.m2ts»).

Поскольку операционная система «Windows» позволяет использовать в названии файла точки (все ограничения на количество точек в имени файла и их местоположение были сняты), то этим может воспользоваться злонамеренная программа. Например, реальное имя файла вредоносного программного обеспечения (вируса) может быть «realword.docx.exe». Но если у вас в параметрах «Windows» не стоит разрешение для отображения расширения имени файла, то вы увидите только «realword.docx». Вы легко можете принять его за текстовый документ в формате «Microsoft Word», в конечном итоге, нажмете на него, и позволите вредоносной программе заразить свой компьютер. С другой стороны, если у вас в операционной системе компьютера разрешено отображение расширения файлов, то вы увидите его полное имя – «realword.docx.exe». Это поможет вам определить, что перед вами фактически исполняемый файл и, по всей вероятности, этот файл вредоносный.

Для чего используются расширения файлов

Вы замечали, что различные типы файлов имеют разные расширения. Текстовые файлы имеют расширения «.doc», «.docx», «.txt», музыкальные файлы – «.mp3», «.wav», «.wma», видео файлы – «.avi», «.wmv», «.mkv» и другие. Самой главной функцией расширения файлов является возможность устанавливать соответствие каждого расширения с программой, которая может открывать и обрабатывать такие файлы. Расширения помогают операционной системе оперативно идентифицировать соответствующую программу, предназначенную для каждого конкретного файла, и автоматически запускать ее. Также, если вы видите расширение имени файла, то работа с ним будет более безопасной, и возможность открыть вредоносный файл, как упоминалось ранее, существенно снижается.

extensions.jpg

По умолчанию последние версии «Windows» не показывают расширения имени файлов, данная опция отключена, и расширения файлов скрыты. С одной стороны – это правильно, так как уменьшается длина названия файла, и отсутствуют разные непонятные символы в его имени. С другой стороны – неудобно, если возникнет необходимость изменить расширение файла, или просто его увидеть, ведь файлы с разными расширениями могут иметь одинаковую иконку, что затруднит их выбор. А также под известное расширение может спрятаться вредоносный файл. Поэтому лучше включить опцию для отображения расширения имени файлов в «Windows», чтобы иметь возможность идентифицировать их.

Показать расширения файлов

Как мы уже говорили, существует два способа доступа к этой настройке. Первый способ, подходящий для «Windows 7-10» – используя «Параметры Проводника» («Параметры папок»), а второй способ – через проводник файлов «Windows». В обоих случаях вы будете активировать опцию для отображения расширений файлов.

Способ 1: используйте раздел «Параметры Проводника» («Параметры папок»)

control-panel.jpg

Для «Windows 7 и 8 (8.1)» также можно выбрать вкладку «Панель управления» дополнительно и в правой панели меню (она часто предустановлена по умолчанию).

control-panel02.jpg

В окне «Все элементы панели управления» выберите раздел «Параметры Проводника» для «Windows 10»,

explorer-options.jpg

и «Параметры папок» для «Windows 7, 8, 8.1» соответственно.

folders-settings.jpg

Существует еще один вариант получить доступ к окну «Параметры Проводника» («Параметры папок»). Выполните следующие действия:

для «Windows 8, 8.1 и 10» откройте окно «Проводника» файлов, в ленте главного меню во вкладке «Файл» выберите раздел «Параметры», и нажмите строку «Изменить параметры папок и поиска»;

для «Windows 7» откройте окно «Проводника» файлов используя сочетание клавиш «Windows + E», нажав и удерживая на клавиатуре кнопку «Alt» вызовите в «Проводнике» ленту меню, в которой выберите вкладку «Сервис», и нажмите раздел «Параметры папок».

explorer-options02.jpg

explorer-options03.jpg

Теперь расширения имен файлов будут отображаться в названии каждого файла. Это изменение будет доступно для всех файлов на вашем компьютере.

extensions02.jpg

Как видите, все довольно просто, и вам нет необходимости использовать какое-либо стороннее программное обеспечение для просмотра расширения файлов. Данная функция включена в стандартный набор инструментов «Windows» для работы с папками и файлами, и может быть активирована в любой момент по вашему желанию.

Способ 2: используйте возможности «Проводника» файлов «Windows»

В более новых версиях «Windows 8, 8.1 и 10» функция включения расширения файлов существенно упростилась. Используя сочетание клавиш «Windows + E» откройте «Проводник» файлов «Windows». В ленте главного меню выберите вкладку «Вид» и нажмите раздел «Показать или скрыть». Во всплывающем меню поставьте флажок в ячейке «Расширения имен файлов».

file-name-extensions.jpg

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

Таким образом, используя два простых способа, вы сможете быстро и легко настроить отображение расширений имен файлов в операционной системе «Windows».

Изменить расширения файлов

Операционная система «Windows» позволяет изменять расширение имени файлов с одного формата на другой. Мы покажем, как это можно сделать, на примере текстового файла. Будьте внимательны, потому что, изменяя расширение файла, вы можете испортить его, и он окажется недоступным, если вы выберите неправильный формат файла. Файл будет испорчен, и вы потеряете всю информацию, хранящуюся в нем, навсегда.

Способ 1: используйте раздел «Свойства»

Для изменения расширения файла необходимо нажать на нем правой кнопкой мыши и выбрать во всплывающем меню раздел «Свойства».

properties.jpg

В окне «Свойства» в поле названия файла замените расширение с «.txt» на «.doc» и нажмите кнопку «ОК» для сохранения внесенных изменений.

properties02.jpg

ok.jpg

Теперь расширение текстового документа изменилось, и файл можно открыть в программе «Microsoft Word».

microsoft-word.jpg

Способ 2: используйте раздел «Переименовать»

Нажмите правой кнопкой мыши на файле, расширение которого вы хотите изменить, и во всплывающем меню выберите раздел «Переименовать».

rename.jpg

Способ 3: изменение расширения группы файлов

Может возникнуть ситуация, когда вам необходимо изменить расширение для целой группы файлов. Для этого вы можете воспользоваться следующим способом. В операционной системе «Windows 7, 8, 8.1» откройте папку, в которой хранятся файлы, расширение которых вы хотите изменить. Зажмите не клавиатуре клавишу «Shift» и нажмите правой кнопки мыши по любому пустому месту открытой папки, во всплывающем меню выберите раздел «Открыть окно команд»,

</> <>или введите в поле пути файла запрос вызова командной строки <>«> для версии <>«>.</> <>< src>

На экране откроется окно командной строки. Для изменения расширения файлов напишите следующую команду:

Значение «ren» является сокращением от полного значения команды «rename» и задает команду переименовать файлы, значение «*.txt » обозначает, какие файлы необходимо выбрать для переименования (в нашем примере все файлы с расширением «.txt»), значение «*.doc» обозначает формат нового расширения, которое будет присвоено выбранным файлам (расширение «.doc»).

cmd02.jpg

Все файлы в выбранной папке поменяли свое расширение с «.txt» на «.doc».

extensions03.jpg

Также для изменения расширения группы файлов вы можете воспользоваться сторонним программным обеспечением, например «Bulk Rename Utility». Интерфейс программы интуитивно понятен, поэтому выполнить изменение расширения группы файлов для любого пользователя не составит особого труда.

В данной статье мы показали основные способы включения и изменения расширения файла в операционной системе «Windows», применяя которые, вы легко сможете выполнить эти процедуры.

Полную версию статьи со всеми дополнительными видео уроками читайте в нашем блоге.

Всем привет. Совсем недавно я столкнулся с проблемой: по необьяснимым причинам карта памяти начала забрасывать все файлы в папку LOST.DIR без расширений. За долгое время там накопилось более 500 файлов разного типа: картинки, видео, аудио, документы. Самостоятельно понять формат файла было невозможным, по этому я стал искать способ решения этой проблемы программным путем.

Поиск решений

Мне не хотелось использовать готовые решения в виде веб-сервисов или программ, по этому появилась мысль написать консольную утилиту, которая бы прошлась по всем файлам и устанавливала расширения автоматически. Для написания утилиты был выбран Python. Поиск подходящих модулей и библиотек так и не принес результатов по нескольким причинам:

  1. Отсутствие поддержки со стороны разработчика
  2. Излишний функционал
  3. Отсутствие поддержки новых версий Python'a
  4. Излишняя усложненность кода

Из множества библиотек сильно выделялась python-magic (почти 1000 звезд на ГитХабе), которая является оберткой библиотеки libmagic. Но использование ее под Windows невозможно без DLL для Unix'овой библиотеки. Меня такой вариант не устроил.

Решение задачи

Исходя из вышеперечисленного, я решил не использовать сторонние библиотеки и модули и решить проблему без них. После недолгого поиска информации о том, как реализовать данную задачу, единственным верным способом оказался определение формата по сигнатуре файла.

Сигнатура файла представляет собой набор байтов, обеспечивающий определение формата файла. Сигнатура имеет следующий вид в шестнадцатеричной системе счисления:

К счастью, в интернете есть два хороший сайта, на которых размещены множество сигнатур разных форматов. Целью стали самые распространенные форматы.
Как оказалось, некоторые сигнатуры подходят под разные форматы файлов, как, например, сигнатура файлов Microsoft Office. Исходя из этого, в некоторых случаях надо будет возвращать список подходящих расширений файла.

Также нередко сигнатуры имеют смещение от начала файла, например, файлы мультимедийного контейнера 3GP.

1. Составление списка данных

В виде списка данных решено использовать JSON файл, с объектом 'data', значением которого будет массив объектов следующего вида:

Где:
format — формат файла;
offset — смещение сигнатуры от начала файла;
signature — массив подходящих сигнатур под указанный формат файла.

2. Написание утилиты

Импортируем необходимые модули:

Считываем список данных:

Отлично, список данных загружен. Теперь мы считываем файл в виде байтов. Мы будем считывать лишь первые 32 байта, так как для определения распространенных форматов больше не требуется, а полное считывание большого файла будет занимать много времени.

Если вывести переменную file, то мы увидим что-то похожее на это:

Теперь считанные байты надо перевести в шестнадцатеричную систему:

Далее мы создаем список, в который будут добавляться подходящие форматы:

А теперь самое интересное: создаем конструкцию, которая будет циклично определять формат файла, пока не пройдется по всем возможным форматам в списке данных:

Относительно данной строки:

Поскольку наши байты представлены в виде строки, и за байт отвечает два символа, мы умножаем смещение на 2 и добавляем количество пробелов между "байтами".
И едиственное что нам осталось, это вывести список подходящих форматов, который представлен переменной out.

Заключение

Как оказалось, различные проектов сталкиваются с необходимостью распознавания формата файла, по этому я решил выпустить мое решение в open-source в виде модуля для Python'a под названием fleep (ссылка на страницу GitHub). Вы уже сейчас можете установить модуль с помощью стандартной python'овской утилиты pip:

Также на GitHub странице проекта есть примеры использования и полный список поддерживаемых форматов файлов.

Напишите функцию, которая заменяет расширение файла на заданное новое расширение.

Введите имя файла qq ;

Введите новое расширение : tmp ;


Вполне себе "функция".

А язык Вы не указали, так что - кушайте, что дают.


Верно записано расширение файла гиф, rt, z, nout?

Верно записано расширение файла гиф, rt, z, nout.


Пооаатннльмв 15 июн. 2021 г., 08:57:36 | 5 - 9 классы

Установите соответствие между типами файлов и расширениями файлов?

Установите соответствие между типами файлов и расширениями файлов.


Школа?

Выберите один из 3 вариантов ответа : 1) полное имя файла 2) расширение файла 3) имя файла.


Kosadmi2013 30 июл. 2021 г., 18:57:28 | 5 - 9 классы

Расширение файла указывает - ?

Расширение файла указывает - ?


Папочка111 23 янв. 2021 г., 07:03:03 | 10 - 11 классы

Создать командный файл, который бы выводил на экран все файлы заданного расширения?

Создать командный файл, который бы выводил на экран все файлы заданного расширения.

Если расширение при вызове командного файла не заданно вывести : "Расширение не введено", если в текущем каталоге файлов с таким расширением нет, то вывести : "Файлов не найдено".


Ivanovsasha85d 11 февр. 2021 г., 04:19:59 | 5 - 9 классы

Каким типам файлов принадлежат следующие расширения : ?

Каким типам файлов принадлежат следующие расширения : .


Pu5syasab5uLo 18 февр. 2021 г., 05:29:56 | 5 - 9 классы

Программы, открывающие файлы со следующими расширениями : txt, doc, bmp, pdf, zip?

Программы, открывающие файлы со следующими расширениями : txt, doc, bmp, pdf, zip.


Какое расширение принадлежит файлу, в котором данные кодированы в текстовом формате?

Какое расширение принадлежит файлу, в котором данные кодированы в текстовом формате?


Джулиетта03 11 мая 2021 г., 14:03:55 | 5 - 9 классы

Помогите ответить?

Какие расширения имени текстовых файлов вы знаете?


Задан полный путь к файлу C : DOCPROBA?

Задан полный путь к файлу C : DOCPROBA.

TXT Каково расширение файла, определяющее его тип : а) C : DOCPROBA ; б)DOCPROBA.


С какими видами расширений файлов работает Word?

С какими видами расширений файлов работает Word?

Читайте также: