Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Как получить имя файла   Найти похожие ветки 

 
Dot   (2005-07-27 11:30) [0]

Приветсвую вас Мастера!.
Собственно сабж.
Как проще всего получить программе свое собственное имя.
Просто от этого зависят процедуры, а если переименовать файл то все идет коту под хвост..
Думал paramstr(0) но это неприемлимо, ибо мне не полный путь нужен а просто имя файла


 
Плохиш ©   (2005-07-27 11:34) [1]

Мда, ExtractFileName(ParamStr(0));


 
GLFox ©   (2005-07-27 11:34) [2]

ExtractFileName(ParamStr(0))


 
Dot   (2005-07-27 11:38) [3]

А через Апи никак ? Чтобы sysutils не подгружать?


 
GLFox ©   (2005-07-27 11:44) [4]

А код функции ExtractFileName в SysUtils посмотреть лень? Возьми и выдери ее оттуда.


 
Antonn ©   (2005-07-27 11:56) [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;

(С) не мое, говорят из КОЛ выдернули


 
Плохиш ©   (2005-07-27 12:08) [6]


> Dot   (27.07.05 11:38) [3]
> А через Апи никак ? Чтобы sysutils не подгружать?

Возможности для извращений безграничны

FindFirstFile

и никаких SysUtils ;-)


 
Dot   (2005-07-27 13:06) [7]

Да спасибо, сам извратился +)
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;


 
begin...end ©   (2005-07-27 13:33) [8]

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


 
Antonn ©   (2005-07-27 14:38) [9]

а у меня трава лучше...



Страницы: 1 вся ветка

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
9-1116772303
Cerberus
2005-05-22 18:31
2005.09.18
Помогите придумать алгоритм.


14-1124788055
dHb
2005-08-23 13:07
2005.09.18
Движок сайта


8-1111582187
Comrade
2005-03-23 15:49
2005.09.18
Mediaplayer


4-1121936114
supervk
2005-07-21 12:55
2005.09.18
проверка готовности принтера LPT


3-1123103366
Silver...
2005-08-04 01:09
2005.09.18
ADODataSet.Filter --- и поле типа Boolean