Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить имя файла


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))


Наверх

Титульная страница Поиск, карта сайта Написать письмо