Thema: Delphi Datei im Pfad finden

Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 

Datei im Pfad finden

  Alt 8. Jul 2006, 10:06
Mit dieser Konsolenanwendung kann man sich auflisten lassen, in welchen Pfaden eine Datei liegt. Beispiel für den Aufruf:
Zitat von pathof:
pathof dcc32.exe
C:\Programme\Borland\BDS\4.0\Bin\dcc32.exe
C:\Programme\Borland\Delphi7\Bin\dcc32.exe
Das kann wichtig sein, wenn man mehrere Installationen besitzt und diese z.b. aus einer Batchdatei heraus aufrufen möchte.

[edit]Man kann jetzt auch einen Dateinamen ohne Extension übergeben - in diesem Fall wird die in PATHEXT hinterlegte Liste von Extensions für jeden Pfad-Eintrag abgearbeitet.[/edit]

Hier der Code:
Delphi-Quellcode:
program Pathof;

{$APPTYPE CONSOLE}
{$WARNINGS OFF}
uses
  SysUtils,
  Windows;

type
   TStringArray = Array of string;

procedure SplitStringByDelimiter(Value : string; Delimiter : char; var AStrings : TStringArray);
var
   P, P1 : PChar;
   S : string;
begin
   P := PChar(Value);
   while P^ <> #0 do
   begin
      P1 := P;
      while (P^ <> Delimiter) and (P^ <> #0) do
         P := CharNext(P);

      SetString(S, P1, P-P1);
      Setlength(AStrings, length(AStrings)+1);
      AStrings[high(AStrings)] := S;
      P := CharNext(P);
   end;
end;

var
   Found : boolean;
   iPath, iExt : integer;
   FilePath, FileName, FileExt : string;
   PathList, PathExts : TStringArray;
begin
   if (ParamCount = 0) then
      WriteLn('Usage : Pathof <filename[.extension]>')
   else
   begin
      FileName := ExtractFileName(ParamStr(1));
      FileExt := ExtractFileExt(FileName);

      if FileExt = 'then
         FileExt := GetEnvironmentVariable('pathext');

      SplitStringByDelimiter(FileExt, ';', PathExts);
      SplitStringByDelimiter(GetEnvironmentVariable('path'), ';', PathList);

      for iPath := 0 to High(PathList) do
      begin
         PathList[iPath] := IncludeTrailingPathDelimiter(PathList[iPath]);
         for iExt := 0 to High(PathExts) do
         begin
            FilePath := PathList[iPath]+ChangeFileExt(Filename,PathExts[iExt]);
            if fileexists(FilePath) then
            begin
               Found := true;
               WriteLn(FilePath);
            end;
         end;
      end;

      if not Found then
         Writeln(Filename+' not found in path'#7);
   end;
end.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat