ExtractFileName — Функция Delphi
Здравствуйте, reanimator, Вы писали:
R>Пишу консольную аппликацию на Visual Sudio 6. Очень нужно извлечь имя файла и расширение. В Delphi есть функция ExtractFileName ( const FileName: string ): string; Существует ли аналог данной функции в MS C++?
От: | reanimator |
Дата: | 29.10.04 15:46 |
Оценка: |
От: | Анатолий Широков |
Дата: | 29.10.04 15:56 |
Оценка: |
Здравствуйте, reanimator, Вы писали:
R>Пишу консольную аппликацию на Visual Sudio 6. Очень нужно извлечь имя файла и расширение. В Delphi есть функция ExtractFileName ( const FileName: string ): string; Существует ли аналог данной функции в MS C++?
От: | reanimator |
Дата: | 29.10.04 16:02 |
Оценка: |
От: | _AK_ |
Дата: | 29.10.04 18:32 |
Оценка: |
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Здравствуйте, reanimator, Вы писали:
R>>Пишу консольную аппликацию на Visual Sudio 6. Очень нужно извлечь имя файла и расширение. В Delphi есть функция ExtractFileName ( const FileName: string ): string; Существует ли аналог данной функции в MS C++?
АШ>
+ ещё куча if-ов на всякие крайние случаи
От: | _AK_ |
Дата: | 29.10.04 18:33 |
Оценка: |
Здравствуйте, reanimator, Вы писали:
R>Пишу консольную аппликацию на Visual Sudio 6. Очень нужно извлечь имя файла и расширение. В Delphi есть функция ExtractFileName ( const FileName: string ): string; Существует ли аналог данной функции в MS C++?
Смотри boost::filesystem, там всё это есть. Я её активно пользую, очень доволен.
От: | Анатолий Широков |
Дата: | 29.10.04 18:48 |
Оценка: |
_AK>+ ещё куча if-ов на всякие крайние случаи
Нет, никаких if-ов на крайние случаи, так как стандарт четко определяет значение npos (-1). Поэтому даже если в исходной строке и не будет никаких слешей и точек, код отработает как и ожидалось.
От: | Анатолий Широков |
Дата: | 29.10.04 19:19 |
Оценка: |
Здравствуйте, Анатолий Широков, Вы писали:
_AK>>+ ещё куча if-ов на всякие крайние случаи
АШ>Нет, никаких if-ов на крайние случаи, так как стандарт четко определяет значение npos (-1). Поэтому даже если в исходной строке и не будет никаких слешей и точек, код отработает как и ожидалось.
Конечно, для extension я слукавил, поскольку отсутствие точки должно приводить к тому, что extension должен быть пустым, у меня же extension будет fullpath, ну да ладно
От: | _AK_ |
Дата: | 29.10.04 19:41 |
Оценка: |
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Здравствуйте, Анатолий Широков, Вы писали:
_AK>>>+ ещё куча if-ов на всякие крайние случаи
АШ>>Нет, никаких if-ов на крайние случаи, так как стандарт четко определяет значение npos (-1). Поэтому даже если в исходной строке и не будет никаких слешей и точек, код отработает как и ожидалось.
АШ>Конечно, для extension я слукавил, поскольку отсутствие точки должно приводить к тому, что extension должен быть пустым, у меня же extension будет fullpath, ну да ладно
Если бы только extension, а про то что слэш может быть обратный не забываем? а про-то что функции на вход могут подать нечто типа «C:\» или «..» не забываем? а про то что точка первый раз может встретиться только в имени директории? вообще написать функции типа: basename(), branch(), leaf(), extension() конечно не сложно, но если необходимо учесть все случаи (и хрен с ней с призрачной переносимостью, хватит только WinAPI) всё таки не так тривиально как может показаться с первого взгляда
ExtractFileName — Функция Delphi
Здравствуйте! Подскажите, есть ли аналог функции ExtractFileName (модуль Sysutils) в WinAPI?
А чем же можно ее заменить?
руками писать своё — неужели так сложно?
Не надо злиться! Вот кусок кода. Как можно обойтись без функции ExtractFileName в этом примере? Пишу прогу только на API.
uses TlHelp32;
.
var
PHandle: THandle;
ProcEntry:TProcessEntry32;
begin
PHandle:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
ProcEntry.dwSize:=sizeof(TProcessEntry32);
if Process32First(PHandle,ProcEntry) then
if ExtractFileName(ProcEntry.szExeFile) = ExeName then result := true;;
while Process32Next(PHandle,ProcEntry) do
if ExtractFileName(ProcEntry.szExeFile) = ExeName then result := true;
CloseHandle(PHandle);
end;
1) pos и copy
2) исходники sysutils
да я и не злюсь, всю злость сливаю в UT | MOH
просто меня то же вначале убивало такое, а сейчас есть свои либы, которые делают такую рутину.
тут же всё эллемтарно — берём 0й парамерт коммандной строки, и копируем спрва всё, что стоит до первого слэша
ExtractFileName — Функция Delphi
Внимание! Эти функции работают со строками, представляющими из себя имена файлов. И результы их работы — тоже строки. Физически с файлами они ничего не делают.
Наименование | Описание | |
---|---|---|
ChangeFileExtention | функция | Изменяет расширение файла. |
DosPathToUnixPath | функция | Конвертирует путь, заданный в спецификации DOS в путь по спецификации Unix. |
ExcludeTrailingBackslash | функция | Возвращает путь без символов разделителей пути («\» — для Windows и «/» — для Linux). Эта функция включена для совместимости со старыми версиями. Новые программы должны использовать ExcludeTrailingPathDelimiter. |
ExcludeTrailingPathDelimiter | функция | Возвращает путь без символов разделителей пути («\» — для Windows и «/» — для Linux). |
ExpandFileName | функция | Возвращает полный путь для имени файла, заданного относительно, без учета регистра. |
ExpandFileNameCase | функция | Возвращает полный путь для имени файла, заданного относительно, с учетом регистра. |
ExpandUNCFileName | функция | Возвращает полный путь для имени файла в формате Universal Naming Convention для сетевых файлов, если это возможно. |
ExtractFileDir | функция | Возвращает полное (включая имя диска) имя дирректории, в которой расположен файл. |
ExtractFileDrive | функция | Возвращает имя диска. |
ExtractFileExt | функция | Возвращает расширение файла. |
ExtractFileName | функция | Возвращает имя файла с расширением. |
ExtractFilePath | функция | Возвращает полный путь к файлу. |
ExtractRelativePath | функция | Возвращает относительное имя файла относительно заданной базовой директории. |
ExtractShortPathName | функция | Конвертирует полное имя файла в короткую 8.3 форму. Например: «C:\Program Files\MyCompany\MyApp\MyApp.exe» будет преобразовано в «C:\Progra
1\MyApp\MyApp.exe». |
IncludeTrailingBackslash | функция | Включает в путь символы разделителей пути («\» — для Windows и «/» — для Linux). Эта функция включена для совместимости со старыми версиями. Новые программы должны использовать IncludeTrailingPathDelimiter. |
IncludeTrailingPathDelimiter | функция | Включает в путь символы разделителей пути («\» — для Windows и «/» — для Linux). |
IsPathDelimiter | функция | Показывает являектся ли символ в указазанной позиции символом разделителя пути («\» — для Windows и «/» — для Linux). |
MatchesMask | функция | Показывает удовлетворяет ли конкретное имя файла формату, заданному в маске. |
MinimizeName | функция | Укорачивает полное имя файла так, чтобы оно поместилось в ограниченную область вывода. Если полное имя файла превышает область вывода, MinimizeName заменяет часть пути точками так, чтобы имя файла вписалось в заданные рамки. |
ProcessPath | процедура | Раскладывает полное имя файла по полочкам, вычленяя: имя диска, путь к файлу, короткое имя файла с расширением. |
UnixPathToDosPath | функция | Конвертирует путь, заданный в спецификации Unix в путь по спецификации DOS. |
Список литературы:
- Delphi7 Help
Функция ExtractFilePath в Delphi, описание и примеры
Функция ExtractFilePath извлекает из строкового значения полного пути к файлу, часть с путем к файлу, без имени самого файла.
function ExtractFilePath( const FileName: string): string;
Параметры Функции ExtractFilePath
FileName | Полный путь к файлу. Например: «C:/myfolder/myfile.txt». |
Пример использования Функции ExtractFilePath
// Полный путь к файлу вместе с именем файла.
FileName := ‘C:/myfolder/myfile.txt’;
// извлечение пути к файлу
FilePath := ExtractFilePath(FileName); // FilePath = ‘C:/myfolder/’
ExtractFileName Routine
Description
(Please provide a description in your own words. It is illegal to use the wording from the Delphi Help.)
Technical Comments
(Known issues / Documentation clarifications / Things to be aware of)
Examples
(Please provide links to articles/source code that show how to use this item.)
See Also
(Please provide links to items specifically related to this item.)
User Comments/Tips
(Please leave your name with your comment.)
ExtractFileName — Функция Delphi
Самый простой и самый верный способ узнать это для любого неизвестного выражения (или в случае внезапного приступа забывчивости) :
1. В любом свободном месте модуля пишем — ExtractFilePath
2. Ставим текстовый курсор где-нибудь внутри написанного
3. Аккуратно и не торопясь нажимаем заветную кнопу F1
4. Получаем нечто вроде:
Delphi Object and Component Reference
ExtractFilePath function
See also Delphi example C++ example
___________________________________ ________________
Returns the drive and directory portions of a file name.
Category
file name utilities
Delphi syntax:
function ExtractFilePath(const FileName: string): string;
Что самое важное — получаем самостоятельно и именно для своей версии Дельфи.
ExtractFileName — Функция Delphi
Внимание! Эти функции работают со строками, представляющими из себя имена файлов. И результы их работы — тоже строки. Физически с файлами они ничего не делают.
Наименование | Описание | |
---|---|---|
ChangeFileExtention | функция | Изменяет расширение файла. |
DosPathToUnixPath | функция | Конвертирует путь, заданный в спецификации DOS в путь по спецификации Unix. |
ExcludeTrailingBackslash | функция | Возвращает путь без символов разделителей пути («\» — для Windows и «/» — для Linux). Эта функция включена для совместимости со старыми версиями. Новые программы должны использовать ExcludeTrailingPathDelimiter. |
ExcludeTrailingPathDelimiter | функция | Возвращает путь без символов разделителей пути («\» — для Windows и «/» — для Linux). |
ExpandFileName | функция | Возвращает полный путь для имени файла, заданного относительно, без учета регистра. |
ExpandFileNameCase | функция | Возвращает полный путь для имени файла, заданного относительно, с учетом регистра. |
ExpandUNCFileName | функция | Возвращает полный путь для имени файла в формате Universal Naming Convention для сетевых файлов, если это возможно. |
ExtractFileDir | функция | Возвращает полное (включая имя диска) имя дирректории, в которой расположен файл. |
ExtractFileDrive | функция | Возвращает имя диска. |
ExtractFileExt | функция | Возвращает расширение файла. |
ExtractFileName | функция | Возвращает имя файла с расширением. |
ExtractFilePath | функция | Возвращает полный путь к файлу. |
ExtractRelativePath | функция | Возвращает относительное имя файла относительно заданной базовой директории. |
ExtractShortPathName | функция | Конвертирует полное имя файла в короткую 8.3 форму. Например: «C:\Program Files\MyCompany\MyApp\MyApp.exe» будет преобразовано в «C:\Progra
1\MyApp\MyApp.exe». |
IncludeTrailingBackslash | функция | Включает в путь символы разделителей пути («\» — для Windows и «/» — для Linux). Эта функция включена для совместимости со старыми версиями. Новые программы должны использовать IncludeTrailingPathDelimiter. |
IncludeTrailingPathDelimiter | функция | Включает в путь символы разделителей пути («\» — для Windows и «/» — для Linux). |
IsPathDelimiter | функция | Показывает являектся ли символ в указазанной позиции символом разделителя пути («\» — для Windows и «/» — для Linux). |
MatchesMask | функция | Показывает удовлетворяет ли конкретное имя файла формату, заданному в маске. |
MinimizeName | функция | Укорачивает полное имя файла так, чтобы оно поместилось в ограниченную область вывода. Если полное имя файла превышает область вывода, MinimizeName заменяет часть пути точками так, чтобы имя файла вписалось в заданные рамки. |
ProcessPath | процедура | Раскладывает полное имя файла по полочкам, вычленяя: имя диска, путь к файлу, короткое имя файла с расширением. |
UnixPathToDosPath | функция | Конвертирует путь, заданный в спецификации Unix в путь по спецификации DOS. |
Список литературы:
- Delphi7 Help
ExtractFileName — Функция Delphi
А такой вариант не подойдет?
Ну естественно вместо Application.ExeName свое имя файла.
А такой вариант не подойдет?
Ну естественно вместо Application.ExeName свое имя файла.
Сань, ты бы хоть вспомогательную переменную завел. У тебя ж одна и та же работа в одной строке делается два раза.
Причем работа не самая легкая: цикличный перебор символов, но абсолютно бесполезная в дублировании.
Кстати, совсем не понятно стремление реализовать код для частного случая, хотя так просто иметь универсальное решение.
Добавлено 17.01.10, 10:57
Для расширений переменой длины можно так:
ExtractFileName — Функция Delphi
Профиль
Группа: Админ
Сообщений: 3624
Регистрация: 31.7.2007
Где: Moscow
Репутация: 50
Всего: 372
В связи с тем, что данный вопрос задается очень часто, я решил кратко описать все функции “семейства” ExtractFile, чтобы потом можно было сюда направлять вопрошающих, пусть выбирают то, что им требуется.
Допустим, что у нас есть некоторый путь к файлу:
Цитата |
C:\\Program Files\Files\Archives\File.rar |
Все примеры будут показаны именно на этом пути.
Объявлена в модуле SysUtils как:
Код |
function ExtractFileDir(const FileName: string): string; |
Единственный параметр FileName – это полное имя файла, содержащее путь к нему.
Результат, это строка, содержащая директорию файла без завершающего слеша.
То есть, допустим, вызовем эту функцию для нашего пути:
Цитата |
C:\\Program Files\Files\Archives\File.rar |
Результат будет таким:
Цитата |
C:\\Program Files\Files\Archives |
Вызываем допустим так:
Код |
ShowMessage(ExtractFileDir(‘C:\\Program Files\Files\Archives\File.rar’)); |
Функция ExtractFileDrive.
Объявлена в модуле SysUtils как:
function ExtractFileDrive(const FileName: string): string;
Параметр FileName, как и в предыдущей функции – полный путь к файлу.
Результат – это строка, содержащая букву раздела жесткого диска + двоеточие.
Вызываем для пути к файлу:
Цитата |
C:\\Program Files\Files\Archives\File.rar |
Цитата |
C: |
Вызываем допустим так:
ShowMessage(ExtractFileDrive(‘C:\\Program Files\Files\Archives\File.rar’));
Объявлена в модуле SysUtils как:
function ExtractFileName(const FileName: string): string;
Параметр FileName, как и в предыдущих функциях – путь к файлу.
Результат – это строка, содержащая имя файла с расширением.
Вызываем для пути к файлу:
C:\\Program Files\Files\Archives\File.rar
File.rar
Вызываем допустим так:
ShowMessage(ExtractFileName(‘C:\\Program Files\Files\Archives\File.rar’));
Объявлена в модуле SysUtils как:
Код |
function ExtractFileExt(const FileName: string): string; |
Параметр FileName – путь к файлу, или его имя.
Результат – это строка, содержащая в себе расширение файла с точкой перед ним.
Вызываем для пути к файлу:
Цитата |
C:\\Program Files\Files\Archives\File.rar |
Цитата |
.rar |
Вызываем допустим так:
Код |
ShowMessage(ExtractFileExt(‘C:\\Program Files\Files\Archives\File.rar’)); |
Код |
ShowMessage(ExtractFileExt(‘File.rar’)); |
Объявлена в модуле SysUtils как:
function ExtractFilePath(const FileName: string): string;
Параметр FileName, как и в предыдущих функциях – путь к файлу.
Результат – тот же что и в ExtractFileDir, но с завершающим слешом в конце.
Вызываем для пути к файлу:
Цитата |
C:\\Program Files\Files\Archives\File.rar |
Цитата |
C:\\Program Files\Files\Archives\ |
Вызываем допустим так:
ShowMessage(ExtractFilePath(‘C:\\Program Files\Files\Archives\File.rar’));
Так же есть функция ExpandFileName, которая бъявлена в модуле SysUtils как:
Код |
function ExpandFileName(const FileName: string): string; |
Она преобразует переданную в FileName строку в валидный путь к файлу(удаляет лишние слеши и тд.)
C:\\\\\Program Files\/Files\\\Archives\File.rar
После вызова ExpandFileName, допустим, таким образом:
ShowMessage(ExpandFileName(‘C:\\\\\Program Files\/Files\\\Archives\File.rar’));
будет показано сообщение с результатом работы функции ExpandFileName, а результат этот будет таким:
Цитата |
C:\Program Files\Files\Archives\File.rar |
В завершение скажу, что все эти функции работают со строками, а не с реальными файлами, то есть, допустим, мы вызовем функцию ExtractFilePath так:
Код |
ShowMessage(ExtractFilePath(‘A:\\BB\CCC\DDDD.eeeee’)); |
Результатом будет “нормальный” путь к файлу:
A:\\BB\CCC\
Так как эти функции работают со строками, не следуют так же пытаться с их помощью найти какой-нибудь файл, например Project1.exe на жестком диске, “поиск” результатов не даст, и полный путь к этому файлу не вернет. Собственно говоря, поиска то и не будет, это заблуждение некоторых начинающих программистов.
PS. Написано для тех кому лень пользоваться поиском, или читать справку.
Это сообщение отредактировал(а) THandle — 26.5.2008, 11:33
|
||
Правила форума «Delphi: Для новичков» | |