home *** CD-ROM | disk | FTP | other *** search
- {
- SEAN PALMER
-
- I just ran some timings, which are gonna be affected by SMARTDRV.EXE
- being loaded, but I took that into account (ran multiple times on same
- file, and took timings on second/subsequent runs, to make sure always
- got cache hits)
-
- What I got was that FileExists below and my modified version of that
- fileExist3 function that's been floating around this echo for a while
- (no bug) both run neck and neck... it's amazing... both are slightly
- faster than FileExist2 and lots lots faster than the 'reset,
- fileExist=(ioresult=0)' type thing that most people still seem to use...
-
- I'd recommend using the first one below as it's really short...
- }
-
- uses
- dos;
-
- { Tied for fastest }
- function fileExists(var s : string) : boolean;
- begin
- fileExists := fSearch(s, '') <> '';
- end;
-
- { 2nd }
- function fileExist2(var s : string) : boolean;
- var
- r : searchrec;
- begin
- findfirst(s, anyfile, r);
- fileExist2 := (dosError = 0);
- end;
-
- { Tied for fastest }
- function fileExist3(var s : string) : boolean; assembler;
- asm
- push ds
- lds si, s { need to make ASCIIZ }
- cld
- lodsb { get length; si now points to first char }
- xor ah, ah
- mov bx, ax
- mov al, [si+bx] { save byte before placing terminating null }
- push ax
- mov byte ptr [si+bx],0
- mov dx, si
- mov ax, $4300 { get file attributes }
- int $21
- mov al, 1 { if carry set, fail }
- pop dx
- mov [si+bx], dl { restore byte }
- pop ds
- end;
-
- { Slowest }
- function fileExist4(var s : string) : boolean;
- var
- f : file;
- begin
- assign(f,s);
- {$I-}
- reset(f);
- {$I+}
- if ioresult = 0 then
- begin
- close(f);
- fileExist4 := true;
- end
- else
- fileExist4 := false;
- end;
-