![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить имя файла
Dot © (2005-07-27 11:30:00)Приветсвую вас Мастера!.
Собственно сабж.
Как проще всего получить программе свое собственное имя.
Просто от этого зависят процедуры, а если переименовать файл то все идет коту под хвост..
Думал paramstr(0) но это неприемлимо, ибо мне не полный путь нужен а просто имя файла
Antonn (2005-07-27 14:38:00) [1]а у меня трава лучше...
begin...end (2005-07-27 13:33:00) [2]> Dot (27.07.05 13:06) [7]
function ExFileName: string;
var
L: Integer;
begin
Result := ParamStr(0);
L := Length(Result);
while (L > 0) and (Result[L] <> '\') do Dec(L);
Result := Copy(Result, L + 1, MaxInt)
end.
Dot (2005-07-27 13:06:00) [3]Да спасибо, сам извратился +)
function ExFileName: string;
var
bufstr: string;
i: integer;
fn: string;
count: integer;
begin
fn:=paramstr(0);
for i:=1 to length(fn) do
begin
if Copy(fn,i,1)='\' then
count:=i;
end;
for i:=count+1 to length(fn) do
begin
bufstr:=bufstr+Copy(fn,i,1);
end;
ExFileName:=bufstr;
end;
Плохиш (2005-07-27 12:08:00) [4]
> Dot (27.07.05 11:38) [3]
> А через Апи никак ? Чтобы sysutils не подгружать?
Возможности для извращений безграничны
FindFirstFile
и никаких SysUtils ;-)
Antonn (2005-07-27 11:56:00) [5]const EmptyString: string = '';
DirDelimiters: PChar = ':\';
procedure EAX2PChar;
asm
TEST EAX, EAX
JNZ @@exit
MOV EAX, offset[EmptyString]
@@exit:
end;
function __DelimiterLast(Str: PChar; Delimiters: PChar): PChar;
asm
PUSH ESI
CALL EAX2PChar
MOV ESI, EDX
MOV EDX, EAX
@@tolast:
CMP byte ptr [EAX], 0
JZ @@next1
INC EAX
JMP @@tolast
@@next1:
PUSH EAX
@@next:
LODSB
TEST AL, AL
JZ @@exit
PUSH EDX
XCHG EDX, EAX
CALL StrRScan
POP EDX
TEST EAX, EAX
JZ @@next
POP ECX
CMP byte ptr [ECX], 0
JZ @@next1
CMP EAX, ECX
JG @@next1
PUSH ECX
JLE @@next
@@exit: POP EAX
POP ESI
end;
function ExtractFileName(const Path: string): string;
asm
PUSH EDX
PUSH EAX
MOV EDX, [DirDelimiters]
CALL __DelimiterLast
POP EDX
CMP byte ptr [EAX], 0
JZ @@1
XCHG EDX, EAX
INC EDX
@@1: POP EAX
CALL System.@LStrFromPChar
end;
(С) не мое, говорят из КОЛ выдернули
GLFox (2005-07-27 11:44:00) [6]А код функции ExtractFileName в SysUtils посмотреть лень? Возьми и выдери ее оттуда.
Dot (2005-07-27 11:38:00) [7]А через Апи никак ? Чтобы sysutils не подгружать?
Плохиш (2005-07-27 11:34:00) [8]Мда, ExtractFileName(ParamStr(0));
GLFox (2005-07-27 11:34:00) [9]ExtractFileName(ParamStr(0))