![]() |
Datei im Pfad finden
Mit dieser Konsolenanwendung kann man sich auflisten lassen, in welchen Pfaden eine Datei liegt. Beispiel für den Aufruf:
Zitat:
[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. |
Re: Datei im Pfad finden
Hallo Union,
ich glaube mich dunkel zu erinnern, dass es unter Unix einen Befehl gab (fake?), der diese Funktionalität hatte. Unter DOS und Windows habe ich mir zuletzt (command shell extensions) so beholfen:
Code:
Ziel war immer zu ermitteln, was die command shell ausführen würde, wenn man nur den Befehl eingeben würde. Wäre die Berücksichtigung von PATHEXT nicht auch für dein Programm eine Überlegung wert?
@echo off
rem LOCATE.CMD if '%1==' goto usage for /D %%f in (.;%path%) do for %%e in (%PATHEXT%) do if exist "%%f\%1%%e" echo "%%f\%1%%e" goto exit :usage echo LOCATE sucht einen Befehl in den (ohne Erweiterung) von PATH bestimmten Ordnern echo Aufruf: locate befehl echo Beispiel: locate cmd :exit Freundliche Grüße vom marabu |
Re: Datei im Pfad finden
Hallo marabu,
natürlich gab es das unter Unix. Ich wollte es halt selber programmieren. Mit PATHEXT hatte ich auch zunächst überlegt, es dann aber verworfen, da dadurch Flexibilität verloren ginge. PATHEXT hätte den Vorteil, dass man die Extension nicht zu wissen braucht. Nachteilig wäre, dass man dann aber keine cfg, ini usw. mehr suchen lassen kann. Natürlich müsste man um das Verhalten von Windows zu simulieren auch die Reihenfolge verändern (Zuerst aktuelles Verzeichnis, dann Windows, dann System32 und dann der Rest). |
Re: Datei im Pfad finden
Zitat:
Zitat:
marabu |
Re: Datei im Pfad finden
wenn man nicht nur in den "path"-Verzeichnissen suchen will geht in der Console auch folgendes:
dir /S filename vorher natürlich in das entsprechende Root-Verzeichnis wechseln bsp: c: cd \ dir /s command.com |
Re: Datei im Pfad finden
Mach mal Dir /S auf einer vollen 200 GB Platte...
|
DP-Maintenance
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz