Как получить имя файла используя регулярное выражение?
Есть путь к файлу ,например такой «D:/QT projects/ConnectDB/Vlad.jpg»,как при помощи регулярного выражения получить Vlad.jpg?
Отслеживать
задан 8 ноя 2017 в 21:24
464 1 1 золотой знак 5 5 серебряных знаков 25 25 бронзовых знаков
Для этого не нужно регулярное выражение, достаточно функций strrchr и substr или их аналогов
8 ноя 2017 в 21:26
что-то в qt не получается найти substr
8 ноя 2017 в 21:49
Я бы сильно удивился, если бы ничего аналогичного там не было.
8 ноя 2017 в 21:53
Я не нашел,к сожалению(
8 ноя 2017 в 21:55
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Судя по всему, сработает такое:
QString fileName = QFileInfo("D:/QT projects/ConnectDB/Vlad.jpg").fileName();
Отслеживать
ответ дан 8 ноя 2017 в 22:26
207k 28 28 золотых знаков 293 293 серебряных знака 526 526 бронзовых знаков
Вот извращенный 🙂 способ, заодно знакомящий с алгоритмами STL
const char sz [] = "dir1\\dir2\\dir3\\dir4\\name.ext"; std::cout (sz + strlen (sz)), std::reverse_iterator (sz), '\\').base ();
Если использовать std::string, то все попроще. Пример для Винды, у Вас, видимо, слеш другой, замените на поиск ‘/’.
Отслеживать
ответ дан 8 ноя 2017 в 22:18
Alex Titov Alex Titov
1,224 7 7 серебряных знаков 8 8 бронзовых знаков
- c++
- qt
- qtcreator
- path
- qregexp
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Функции поиска имени файла
Эти функции осуществляют и завершают поиск для указанных имен файлов:
- _findnext , _wfindnext
- _findfirst , _wfindfirst
- _findclose
Замечания
Функция _findfirst предоставляет сведения о первом экземпляре имени файла, соответствующем файлу, указанному в аргументе filespec . В filespec можно использовать любые комбинации подстановочных знаков, которые поддерживаются операционной системой.
Функции возвращают сведения о файле в _finddata_t структуре, которая определена в IO.h . Различные функции в данном семействе используют множество вариантов структуры _finddata_t . Базовая структура _finddata_t содержит следующие элементы:
unsigned attrib
Атрибут файла.
time_t time_create
Время создания файла ( -1L для файловых систем FAT). Это время хранится в формате UTC. Для преобразования в местное время используйте функцию localtime_s .
time_t time_access
Время последнего доступа к файлам ( -1L для файловых систем FAT). Это время хранится в формате UTC. Для преобразования в местное время используйте функцию localtime_s .
time_t time_write
Время последней записи в файл. Это время хранится в формате UTC. Для преобразования в местное время используйте функцию localtime_s .
_fsize_t size
Длина файла в байтах.
char name [ _MAX_PATH ] NULL — прерванное имя сопоставленного файла или каталога без пути.
В файловых системах, которые не поддерживают создание и время последнего доступа к файлу, такие как система FAT, time_create всегда time_access являются -1L полями.
_MAX_PATH определяется как Stdlib.h 260 байт.
Не удается указать целевые атрибуты (например _A_RDONLY ), чтобы ограничить операцию поиска. Эти атрибуты возвращаются в attrib поле _finddata_t структуры и могут иметь следующие значения (определены в IO.h ). Пользователи не должны полагаться на эти атрибуты, являясь единственными значениями, возможными для attrib поля.
_A_ARCH
Архивный. Установите каждый раз, когда файл изменяется и очищается командой BACKUP . Значение: 0x20 .
_A_HIDDEN
Скрытый файл. Не часто встречается с командой DIR , если вы не используете /AH этот параметр. Возвращает сведения об обычных файлах и файлах, имеющих этот атрибут. Значение: 0x02 .
_A_NORMAL
Нормальный. У файла не установлены никакие другие атрибуты, чтение и запись возможны без ограничений. Значение: 0x00 .
_A_RDONLY
Только чтение. Невозможно открыть файл для записи, и файл с тем же именем не удается создать. Значение: 0x01 .
_A_SUBDIR
Подкаталог. Значение: 0x10 .
_A_SYSTEM
Системный файл. Обычно не видно с DIR помощью команды, если /A только не используется параметр или /A:S параметр. Значение: 0x04 .
Функция _findnext находит следующее имя, если таковое имеется, которое соответствует аргументу filespec , указанному в предыдущем вызове функции _findfirst . Аргумент fileinfo должен указывать на структуру, инициализированную предыдущим вызовом функции _findfirst . Если обнаружено соответствие, содержимое структуры fileinfo изменяется, как описано выше. В противном случае он остается неизменным. Функция _findclose закрывает указанный дескриптор поиска и освобождает все связанные ресурсы для функций _findfirst и _findnext . Дескриптор, возвращенный ранее функцией _findfirst или _findnext , необходимо сначала передать в функцию _findclose , чтобы можно было выполнять операции изменения (например, удаление) в каталогах, которые образуют переданные им пути.
Функции _find допускают вложение. Например, если вызов функции _findfirst или _findnext нашел файл, являющийся подкаталогом, новый поиск можно начать другим вызовом функции _findfirst или _findnext .
_wfindfirst и _wfindnext — это версии функций _findfirst и _findnext для расширенных символов. Аргумент структуры версий расширенных символов имеет _wfinddata_t тип данных, определенный в IO.h и в Wchar.h . Поля этого типа данных совпадают с полями _finddata_t типа данных, за исключением того, что в name _wfinddata_t поле имеет тип, а не тип wchar_t char . _wfindfirst В противном случае и _wfindnext поведение идентично _findfirst и _findnext .
Функции _findfirst и _findnext используют 64-разрядный тип времени. Если необходимо использовать прежний 32-разрядный тип времени, можно определить _USE_32BIT_TIME_T . Версии этих функций с 32 суффиксом в их именах используют 32-разрядный тип времени, а те, с 64 суффиксом, используют 64-разрядный тип времени.
Функции _findfirst32i64 , _findnext32i64 , _wfindfirst32i64 и _wfindnext32i64 также ведут себя идентично версиям этих функций с 32-разрядным типом времени, за исключением того, что они используют и возвращают 64-разрядные значения длины файлов. Функции _findfirst64i32 , _findnext64i32 , _wfindfirst64i32 и _wfindnext64i32 используют 64-разрядный тип времени, но 32-разрядные значения длины файлов. Эти функции используют соответствующие варианты типа _finddata_t , в которых поля имеют разные типы для времени и размера файла.
_finddata_t фактически представляет собой макрос, который преобразуется в _finddata64i32_t (или _finddata32_t , если определена константа _USE_32BIT_TIME_T ). В следующей таблице приведены сводные сведения об этих вариантах _finddata_t :
| Структура | Тип времени | Тип размера файла |
|---|---|---|
| _finddata_t , _wfinddata_t | __time64_t | _fsize_t |
| _finddata32_t , _wfinddata32_t | __time32_t | _fsize_t |
| __finddata64_t , _wfinddata64_t | __time64_t | __int64 |
| _finddata32i64_t , _wfinddata32i64_t | __time32_t | __int64 |
| _finddata64i32_t , _wfinddata64i32_t | __time64_t | _fsize_t |
_fsize_t представляет собой typedef для unsigned long (32 бита).
Пример
// crt_find.c // This program uses the 32-bit _find functions to print // a list of all files (and their attributes) with a .C extension // in the current directory. #include #include #include #include int main( void ) < struct _finddata_t c_file; intptr_t hFile; // Find first .c file in current directory if( (hFile = _findfirst( "*.c", &c_file )) == -1L ) printf( "No *.c files in current directory!\n" ); else < printf( "Listing of .c files\n\n" ); printf( "RDO HID SYS ARC FILE DATE %25c SIZE\n", ' ' ); printf( "--- --- --- --- ---- ---- %25c ----\n", ' ' ); do < char buffer[30]; printf( ( c_file.attrib & _A_RDONLY ) ? " Y " : " N " ); printf( ( c_file.attrib & _A_HIDDEN ) ? " Y " : " N " ); printf( ( c_file.attrib & _A_SYSTEM ) ? " Y " : " N " ); printf( ( c_file.attrib & _A_ARCH ) ? " Y " : " N " ); ctime_s( buffer, _countof(buffer), &c_file.time_write ); printf( " %-12s %.24s %9ld\n", c_file.name, buffer, c_file.size ); >while( _findnext( hFile, &c_file ) == 0 ); _findclose( hFile ); > >
Listing of .c files RDO HID SYS ARC FILE DATE SIZE --- --- --- --- ---- ---- ---- N N N Y blah.c Wed Feb 13 09:21:42 2002 1715 N N N Y test.c Wed Feb 06 14:30:44 2002 312
Path. Get File Name Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
Возвращает имя и расширение файла из пути к файлу, представленного диапазоном символов только для чтения.
Возвращает имя файла и расширение указанной строки пути.
GetFileName(ReadOnlySpan)
Возвращает имя и расширение файла из пути к файлу, представленного диапазоном символов только для чтения.
public: static ReadOnlySpan GetFileName(ReadOnlySpan path);
public static ReadOnlySpan GetFileName (ReadOnlySpan path);
static member GetFileName : ReadOnlySpan -> ReadOnlySpan
Public Shared Function GetFileName (path As ReadOnlySpan(Of Char)) As ReadOnlySpan(Of Char)
Параметры
Диапазон только для чтения, содержащий путь, из которого нужно получить имя и расширение файла.
Возвращаемое значение
Символы, следующие за последним символом разделителя каталогов в пути path .
Комментарии
Возвращаемый диапазон только для чтения содержит символы пути, следующие за последним разделителем в path . Если последний символ в path является разделителем тома или каталога, метод возвращает ReadOnlySpan.Empty. Если path не содержит символа-разделителя, метод возвращает path .
См. также раздел
Применяется к
GetFileName(String)
Возвращает имя файла и расширение указанной строки пути.
public: static System::String ^ GetFileName(System::String ^ path);
public static string GetFileName (string path);
public static string? GetFileName (string? path);
static member GetFileName : string -> string
Public Shared Function GetFileName (path As String) As String
Параметры
Строка пути, из которой нужно получить имя файла и расширение.
Возвращаемое значение
Символы, следующие за последним символом разделителя каталогов в пути path . Если последним символом параметра path является символ разделения тома или каталога, этот метод возвращает Empty. Если значением параметра path является null , метод возвращает null .
Исключения
платформа .NET Framework и .NET Core версий старше 2.1: path содержит один или несколько недопустимых символов, определенных в GetInvalidPathChars().
Примеры
В следующем примере показано поведение метода на GetFileName классической платформе Windows.
String^ fileName = "C:\\mydir\\myfile.ext"; String^ path = "C:\\mydir\\"; String^ result; result = Path::GetFileName( fileName ); Console::WriteLine( "GetFileName('') returns ''", fileName, result ); result = Path::GetFileName( path ); Console::WriteLine( "GetFileName('') returns ''", path, result ); // This code produces output similar to the following: // // GetFileName('C:\mydir\myfile.ext') returns 'myfile.ext' // GetFileName('C:\mydir\') returns ''
string fileName = @"C:\mydir\myfile.ext"; string path = @"C:\mydir\"; string result; result = Path.GetFileName(fileName); Console.WriteLine("GetFileName('') returns ''", fileName, result); result = Path.GetFileName(path); Console.WriteLine("GetFileName('') returns ''", path, result); // This code produces output similar to the following: // // GetFileName('C:\mydir\myfile.ext') returns 'myfile.ext' // GetFileName('C:\mydir\') returns ''
Dim fileName As String = "C:\mydir\myfile.ext" Dim pathname As String = "C:\mydir\" Dim result As String result = Path.GetFileName(fileName) Console.WriteLine("GetFileName('') returns ''", fileName, result) result = Path.GetFileName(pathname) Console.WriteLine("GetFileName('') returns ''", pathname, result) ' This code produces output similar to the following: ' ' GetFileName('C:\mydir\myfile.ext') returns 'myfile.ext' ' GetFileName('C:\mydir\') returns ''
Комментарии
Возвращаемое значение равно , null если путь к файлу — null .
Символы разделителя, используемые для определения начала имени файла: DirectorySeparatorChar и AltDirectorySeparatorChar.
Так как \ является законным именем файла в Unix, GetFileName выполнение на платформах под управлением Unix не может правильно возвращать имя файла из пути на основе Windows, например C:\mydir\myfile.ext, но GetFileName выполнение на платформах под управлением Windows может правильно возвращать имя файла из пути на основе Unix, например /tmp/myfile.ext, поэтому поведение GetFileName метода не является строго одинаковым на платформах под управлением Unix и Windows.
Список распространенных задач ввода-вывода см. в разделе Общие задачи ввода-вывода.
См. также раздел
- Форматы путей к файлам в системах Windows
- Файловый и потоковый ввод-вывод
- Практическое руководство. Чтение текста из файла
- Практическое руководство. Запись текста в файл
Как получить имя файла java
Чтобы получить имя файла в Java , можно использовать метод getName() класса File .
File file = new File("C:/path/to/myfile.txt"); String fileName = file.getName(); System.out.println(fileName); // => myfile.txt