ExtractFileName — Функция Delphi

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.

Список литературы:

  1. 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.

Список литературы:

  1. 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

Google
Дата 11.11.2020, 23:32 (ссылка)

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

Адрес и имя файла

Тип Variant

Бывают случаи, когда на этапе программирования мы еще не можем четко определить тип данных определенной переменной. В таком случае можно воспользоваться очень мощным типом Variant . Этот тип вводился в Delphi для поддержки технологии OLE ( Object Link and Embedding – внедрение и связь объектов). Такая технология широко используется в Windows для обмена данными между приложениями различного типа. С помощью OLE происходит вставка таблицы MS Excel в редактор текстов MS Word , или картинка из Paint легко вставляется в тот же редактор. В этой технологии Variant используется на каждом шагу, однако ему можно найти применение и в других случаях.

Переменные типа Variant могут принимать значения любого типа! Вы присваиваете такой переменной что угодно, а программа сама определяет ее тип на этапе выполнения. Давайте рассмотрим пример:

В этом примере во время выполнения программы тип переменной изменится 4 раза, и код выполнится корректно. Когда программа встречает тип Variant , она автоматически выделяет под нее память . Если значение не задано, переменной присваивается ноль.

Совет: старайтесь использовать тип Variant только там, где это действительно необходимо! За удобство использования такой переменной тоже приходится платить. Переменная такого типа занимает значительно больше памяти, чем переменная любого другого типа. Процессору мы тоже задаем лишнюю работу, ведь сначала нужно определить тип данных в переменной, затем присвоить этот тип самой переменной, и т.п. Кроме того, переменные типа Variant очень сложно отлаживать в больших программах. Складывая, к примеру, строку и целое число , вы можете получить совсем не тот результат, который ожидали!

Как вы считаете, какой результат окажется в конце концов в переменной v1 ? На первый взгляд, результат очевиден: число 16. Однако не спешите с выводами. Когда операторы вычисления имеют равный приоритет, они выполняются слева – направо. В данном примере вначале объединятся строки, в результате чего получится строка «15». Затем эта строка преобразуется в целое число , и к нему будет прибавлено число 10. Поэтому результат сложения – число 25.

Функции для работы с именем файла

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

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

Функция ExtractFileName()

Функция возвращает имя файла без имени диска и каталогов, извлекая его из полного имени файла FileName . В качестве параметра указывается полный путь и имя файла .

Функция ExtractFilePath()

Функция возвращает путь к файлу, извлекая его из полного имени файла. Если имя файла не содержит ни имя каталогов, ни имя диска, то функция возвращает пустую строку. Подобное же действие выполняет функция ExtractFileDir() . Отличие этих функций в том, что в конце возвращаемого адреса функции ExtractFilePath() есть знак «\», а функция ExtractFileDir() этот знак не устанавливает:

Функция ExtractShortPathName()

Функция конвертирует длинное имя файла в DOS-формат, так называемый, 8.3. Этот формат подразумевает, что имя файла или папки может быть длиной максимум 8 символов, а затем, после точки, может присутствовать расширение имени файла из 3-х символов. Если имя папки (файла) имеет больше символов, оно будет обрезано до 8 символов.

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

Процедура ProcessPath()

Процедура анализирует полное имя файла и возвращает отдельно имя диска, каталог и имя файла . Если файл не существует, то возникает ошибка. Когда полное имя файла содержит больше одного каталога, также возникает ошибка.

Функция ExtractFileDrive()

Функция возвращает имя диска, извлеченное из полного имени файла. Если указанное имя файла не содержит имя диска, то функция возвращает пустую строку. Для имени в UNC формате (сетевое имя) возвращается строка в формате ‘\\ \ ‘.

Функция ExtractFileExt()

Функция возвращает расширение файла, имя которого указано в параметре. Результирующая строка включает в себя символ точки и символы расширения файла. Если указанное имя файла не имеет расширения, то функция возвращает пустую строку. Пример:

Пишем программу

Чтобы усвоить, как работают эти функции, создадим новое приложение . Форму сразу переименуйте в fMain , а проект сохраните под названием fname в отдельной папке. На форму установите Edit , здесь будет отображаться полное имя файла . Сразу под ней установите Label , тут будет отображаться результат работы функций. Очистите текст и у Edit и у Label . Ниже бросьте на форму кнопку, и напишите на ней «Открыть файл «. Рядом с ней бросьте OpenDialog , он нам понадобится для открытия нужного файла. Еще ниже сгруппируйте 6 кнопок, на которых напишите:

Илон Маск рекомендует:  Что такое код cpdf_finalize
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Правила форума «Delphi: Для новичков»