![]() |
Pfad ermitteln einer Datei
Hallo erstmal,
ich habe da mal ein problem und zwar wenn ich angenommen in einer listbox ein dateinamen geladen habe (z.B. Hallo.txt), wie bekomme ich jetzt den Pfad heraus wo sich die datei befindet? wenn ich C:\Hallo.txt habe , weiß ich mit ExtractFilePath(); ich habe aber nur Hallo.txt kann ich da nicht irgendwie herausfinden wo die liegt? mfg Alex |
Re: Pfad ermitteln einer Datei
Mit FindFirst/FindNext suchen lassen.
Man erhält so ganz einfach den Pfad. |
Re: Pfad ermitteln einer Datei
danke werde es mal probieren
mfg alex |
Re: Pfad ermitteln einer Datei
|
Re: Pfad ermitteln einer Datei
jo danke schön,wollte nämlich grade fragen wie das geht aber hat sich ja jetzt mit dem link erledigt
mfg alex |
Re: Pfad ermitteln einer Datei
@Matze: ich muss doch nochmal nachfragen :-)
und zwar habe ich das jetzt mal so gemacht: //Aufruf FindAllFiles('C:','*.*',true); //Aufruf
Delphi-Quellcode:
mein problem ist jetzt wo gebe ich denn an das er Hallo.txt suchen soll?
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then // --> ein Verzeichnis wurde gefunden // der Verzeichnisname steht in SR.Name // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist // RootFolder + SR.Name if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin // --> eine Datei wurde gefunden // der Dateiname steht in SR.Name // der vollständige Dateiname (inkl. Pfadangabe) ist // RootFolder + SR.Name // folgende Zeile schreibt den vollständigen Namen in eine Memo Feld des // Formulars Form1 //Form1.Memo1.Lines.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; und kann ich auch mehrere Partitionen durchsuchen lassen? MFG Alex |
Re: Pfad ermitteln einer Datei
Bei "Mask" im Kopf der Prozedur:
Zitat:
Mehrere Partitionen kannst du nur durchsuchen, wenn du vorher ermittelst, wie viele es auf dem Ziel-Rechner gibt, und wenn du o.g. Prozedur dann am besten in einer Schleife aufrufst, wobei "RootFolder" dann die jeweilige Partition (C:\ -> ?) ist. |
Re: Pfad ermitteln einer Datei
achso, danke
und geht das auch mit mehrern partitionen? mfg alex |
Re: Pfad ermitteln einer Datei
Ich wüede es prinzipiell anders machen. Irgendwo muss die Datei ja herkommen. Wenn du jetzt nur den Name ohne Pfad in der Listbox anzeigen läßt, würde ich den Pfad als Objekt zu dem Item in der Listbox speichern. Wie das geht, kannst du hier kucken:
![]() |
Re: Pfad ermitteln einer Datei
z.B. so:
Delphi-Quellcode:
For i := 67 {C} to 90 {Z} do
FindAllFiles(Chr(i) + ':', '*.*', true); |
Re: Pfad ermitteln einer Datei
Wie's direkt geht, weiß ich nicht. :angle2:
Aber du könntest diese Procedure in einer Schleife durchlaufen. Die Partitionen findest du so heraus: ![]() Die Patitionen allein bekommst du, indem du nur die
Delphi-Quellcode:
beachtest.
DRIVE_FIXED
|
Re: Pfad ermitteln einer Datei
Und noch mal, mit Matzes Vorschlag drin:
Delphi-Quellcode:
Var i: Integer;
S: String; S := 'Hallo.txt'; For i := 67 {C} to 90 {Z} do If GetDriveType(PChar(Chr(i) + ':\')) = DRIVE_FIXED Then FindAllFiles(Chr(i) + ':', S, True); |
Re: Pfad ermitteln einer Datei
danke für die ganzen vorschläge erstmal
das mit den partitionen habe ich schon hinbekommen, danke @luckie das mit den objekten habe ich mir auch schon so überlegt das es da was geben muss werde das mal probieren danke habe jetzt mal das beispiel für euch und er hängt sich in der FindAllFiles procedure fest:
Delphi-Quellcode:
//Aufruf
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then // --> ein Verzeichnis wurde gefunden // der Verzeichnisname steht in SR.Name // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist // RootFolder + SR.Name if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin // --> eine Datei wurde gefunden // der Dateiname steht in SR.Name // der vollständige Dateiname (inkl. Pfadangabe) ist // RootFolder + SR.Name // folgende Zeile schreibt den vollständigen Namen in eine Memo Feld des // Formulars Form1 //Form1.Memo1.Lines.Add(RootFolder + SR.Name); end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; DateiInfo.Name := '04 - Within Temptation - Caged.mp3'; FindAllFiles('C:',DateiInfo.Name,true); //Aufruf tja er kommt aus der procedure nie wieder raus das das komische und ich habe nur C: hier auf arbeit hoffentlich kann mir es jemand sagen mfg alex |
Re: Pfad ermitteln einer Datei
Okay sorry war mein Fehler denn er kommt wieder raus nur es dauert ewig, kann man das nicht beschleunigen?
mal trotzdem ne frage: wenn ich jetzt in einem String den Pfad zuweisen will wo die Datei liegt, wie mache ich das denn ich kann ja nicht sagen p := FindAllFiles('C:',DateiInfo.Name,true); und auf RootFolder + SR.Name kann ich außerhalb der procedure nicht zugreifen.ist bestimmt nur ein denkfehler von mir wäre aber gut wenn ihr es mir sagt mfg alex |
Re: Pfad ermitteln einer Datei
Er such unter umständer schon eine ganze Weile (na gut, bei mir geht es mit N)
Bei mir ist es durchgelaufen. Du kannst ja mal nach einer Weile an der markierten Stelle einen Haltepunkt legen (z.B. mit F5) und schauen wo dein Programm im Moment ist (z.B. die Maus über RootFolder halten und ins Hint schauen) - danach Haltepunkt weg (F5) und witerlaufen lassen (F9)
Code:
oder einfach die aktuelle Position anzeigenlassen, dadurch dauert es aber noch mal etwas länger
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin [color=red] if AnsiLastChar(RootFolder)^ <> '\' then [/color] RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then (das aktielle Verzeichnis wird in der Fensterüberschrift von Form1 angezeigt)
Code:
[add]
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin [color=red]Form1.Caption := RootFolder; Application.ProcessMessages;[/color] if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then Menno, bin heute wohl ständig zu langsam :wall: |
Re: Pfad ermitteln einer Datei
hallo erstmal
ich muss nochmal stören :-) hab mich gestern abend nochmal hingesetzt und mal ein wenig im debugger durchgegangen um den quelltext zu verstehen und alles drum herum und nun ist mir ja aufgefallen, ich suche ja eine datei, muss ich da nicht FindAllFiles('C:', DateiInfo.Name, FALSE); (wichtig das false), nehmen?
Delphi-Quellcode:
so rein vom theoretischen müsste doch in Code jetzt der Pfad liegen von der Datei (DateiInfo.Name) die ich suche oder? Also in DateiInfo.Name steht der Dateiname vollständig mit endung drinne.nur ich bekomme kein Pfad zurück,wo liegt das Problem?
procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var SR: TSearchRec; begin if AnsiLastChar(RootFolder)^ <> '\' then RootFolder := RootFolder + '\'; if Recurse then if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory = faDirectory then // --> ein Verzeichnis wurde gefunden // der Verzeichnisname steht in SR.Name // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist // RootFolder + SR.Name if (SR.Name <> '.') and (SR.Name <> '..') then FindAllFiles(RootFolder + SR.Name, Mask, Recurse); until FindNext(SR) <> 0; finally FindClose(SR); end; if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then try repeat if SR.Attr and faDirectory <> faDirectory then begin // --> eine Datei wurde gefunden // der Dateiname steht in SR.Name // der vollständige Dateiname (inkl. Pfadangabe) ist // RootFolder + SR.Name // folgende Zeile schreibt den vollständigen Namen in eine Memo Feld des // Formulars Form1 //Form1.Memo1.Lines.Add(RootFolder + SR.Name); [b]Code := RootFolder + SR.Name; [/b]<----habe das so gemacht end; until FindNext(SR) <> 0; finally FindClose(SR); end; end; MFG Alex |
Re: Pfad ermitteln einer Datei
Also an dem TRUE liegt's nicht.
Kann es sein, das du die function falsch aufrufst? [/Edit]Ach ja, da, wo du
Delphi-Quellcode:
stehen hast, kannst du den Pfad + Dateinamen herbekommen, das stimmt auf jeden Fall.
[b]Code := RootFolder + SR.Name; [/b]<----habe das so gemacht
Anstatt deinem Code, kannst du testweise auch mal
Delphi-Quellcode:
schreiben, dann siehst du, ob das wenigstens stimmt.
Edit1.Text := RootFolder + SR.Name
|
Re: Pfad ermitteln einer Datei
die function wird schon richtig aufgerufen, er springt ja rein und macht da drinne sein zeug.
ich habe jetzt mal probiert Code := RootFolder; Code wird vorher auf '' gesetzt also da steht nix drinne, ich brauch ja nur den Pfad nicht nochmal den Dateiname, (also ohne Sr.Name) ich raffs einfach nicht... :-) |
Re: Pfad ermitteln einer Datei
kaum zu glauben es geht.war ein denkfehler von mir sorry
nur leider braucht das programm sehr sehr lange um zwei mp3's zu vertauschen.das echt heftig.es muss doch ne möglichkeit geben das es schneller geht oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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