Имя файла C без расширения

Обновлено: 03.07.2024

Спасибо. Мы получили ваш запрос и незамедлительно ответим.

Присоединяйтесь к нам!

  • Общаться с другими участниками
  • Уведомления об ответах
    на ваши сообщения
  • Поиск по ключевым словам
  • Доступ в один клик к вашим
    любимым форумам
  • Автоматические подписи
    на ваших сообщениях
  • Лучше всего то, что это бесплатно!

*Функции Tek-Tips зависят от того, получают ли участники электронную почту. Присоединяясь, вы соглашаетесь на получение электронной почты.

Правила публикации

Реклама, продажа, рекрутинг, размещение курсовых и дипломных работ запрещено.

Получение имени файла без расширения

Получение имени файла без расширения

ExtractFileName() включает расширение файла. Как прочитать имя файла, указанного в диалоге Открыть, и поместить его в метку без расширения. Например, я выбираю файл "C:\file.txt" и хочу, чтобы отображался "файл".

Я хотел бы видеть именно то, как оно отображается в проводнике с отключенными параметрами «Отображать расширения». Как я уже сказал, я хотел бы видеть только имя файла без расширения, поэтому, если Windows говорит, что имя — «file.txt.avi.bmp», а расширение — «exe», я хочу видеть что угодно, кроме «exe». /p>

вы должны найти позицию последней точки в строке имени файла (поиск справа налево) и вернуть все символы до этой позиции (слева направо). Если нет смысла, верните всю строку.

Кроме того, вы можете использовать ExtractFileName для получения имени файла, а затем использовать ExtractFileExt для получения расширения имени файла. Выполните поиск строки или сравнение имени файла для расширения. Чтобы получить только имя файла, возьмите все символы от начала строки до места совпадения двух строк. Звучит сложнее, чем есть на самом деле.

Джеймс П. Коттингем

Нет места лучше 127.0.0.1.
Нет места лучше 127.0.0.1.

Самая простая вещь, которую я могу придумать, выглядит так:

пока (int Index = Filename.AnsiPos("."))
Filename = Filename.SubString(0, Index-1);

Имя файла возвращается без точек.

Вот мой код:

AnsiString __fastcall WithoutFileExt(AnsiString fn)
int dp=fn.Length();
в то время как (dp!=0 && fn[dp]!='.') dp--;

если (dp) вернуть fn.SubString(1,dp-1);

Вот самый простой способ извлечь расширение из имени файла (при условии, что расширение состоит из 3 символов):

newFileName = fileName.SubString(0, fileName.Length()-4);

Это должно сработать ;)

Label1->Caption = ChangeFileExt( ExtractFileName(OpenDialog1->FileName) , "");

Если у вас есть имя файла в массиве символов (char[]), как я часто делаю, я удаляю его следующим образом:

char Filename[PATH_SIZE];
// Имя файла заполнено
// Теперь удалите расширение, выполнив поиск ПОСЛЕДНЕГО вхождения '.'
strrchr(&Filename,'.') = 0 ; // Заменяет последний '.' с C-концом строки

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

У меня есть для вас задание.

напишите функцию, которая принимает длинное имя файла Windows и возвращает имя файла DOS 8.3. не забывайте все правила именования в dos.

Я сравню свою с вашей, и, может быть, мы сделаем лучшую мышеловку.

Отправлено предупреждение

Благодарим вас за помощь в защите форумов Tek-Tips от неприемлемых сообщений.
Персонал Tek-Tips проверит это и примет соответствующие меры.

Ответить в этой теме

Размещение сообщений на форумах Tek-Tips доступно только для участников.

Нажмите здесь, чтобы присоединиться к Tek-Tips и пообщаться с другими участниками! Уже участник? Войти

Мы хотим получить имя файла по этому пути, например, «data.csv» и «data» (с расширением или без него).

Давайте посмотрим, как это сделать

Получить имя файла с помощью библиотеки файловой системы Boost и C++17

И Boost, и C++17 FileSystem Library предоставляют похожий API в разных пространствах имен.

Давайте посмотрим, как это сделать

Создать объект Path из заданной строки, т.е.

Затем проверьте, есть ли у данного пути основа, и если да, то получите эту основу.

здесь ствол представляет собой имя файла с расширением.

Чтобы получить имя файла без расширения, используйте функцию filename() по пути, т.е.

Оформить заказ можно следующим образом:

Чтобы использовать описанную выше функцию с библиотекой файловой системы Boost, используйте следующий заголовочный файл и пространство имен,

Чтобы использовать описанную выше функцию с библиотекой файловой системы C++17, используйте следующий заголовочный файл и пространство имен,

Полный пример исполняемого файла с использованием Boost выглядит следующим образом

Вывод:

Чтобы скомпилировать приведенный выше код в Linux с помощью библиотеки файловой системы Boost, используйте следующую команду:

Чтобы скомпилировать приведенный выше код на C++17, измените файл заголовка и пространство имен, как указано выше, и используйте следующую команду:

Получить имя файла с помощью функций C++ std::string


Вывод:

Хотите лучше изучить современный C++?

Мы составили список лучших курсов C++, которые научат вас передовому современному C++ с самого начала до продвинутого уровня. Он также познакомит вас со словом Smart Pointers, семантикой перемещения, значением R, лямбда-функцией, авто, шаблоном Variadic, циклами на основе диапазона, многопоточностью и многими другими новейшими функциями C++, т.е. от C++11 до C++. 20.

Ознакомьтесь с подробными обзорами лучших современных курсов C++

Помните, что C++ требует большого терпения, настойчивости и практики. Итак, начните учиться сегодня.

Похожие записи

Удалить все в строке перед символом — C++

Удалить в строке все после символа — C++

Удалить символ из строки по индексу в C++

Удалить символы новой строки из строки в C++

Как удалить символ из строки в C++

Удалить пробелы из строки в C++

Удалить последний символ из строки в C++

Удалить первый символ из строки в C++

Преобразование символа в нижний регистр в C++

Преобразование символа в верхний регистр в C++

Преобразование char в int в C++

Проверить, содержит ли строка определенные символы в C++

Проверить, является ли строка палиндромом в C++

Проверить, является ли строка пустой в C++

Преобразовать Long в String в C++ | (3 способа)

Преобразование числа double в строку в C++ (3 способа)

Преобразование числа с плавающей запятой в строку в C++ (3 способа)

C++ — проверка, содержит ли строка символ

C++ — преобразование int в строку (3 способа)

C++: преобразование вектора в множество (5 способов)

Оставить комментарий Отменить ответ

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

Реклама

Реклама

Последние публикации

C++11 — умные указатели

C++11 — лямбда-выражения

C++11 — неупорядоченные наборы

C++11 — неупорядоченная карта

C++11 — Список инициализаторов

C++11 — std::array

C++11 — Утилиты

C++11 — потоки

C++11 — файловые системы

C++11 — ссылки Rvalue

Что-то ищу

Учебники по C++/C++11

Условия использования

Условия и политика

Учебники по Python

Избранные сайты

Отказ от ответственности

Условия и политика

Авторское право © 2022 thisPointer

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

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

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

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

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

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

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

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

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