Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Pfad ermitteln einer Datei (https://www.delphipraxis.net/14645-pfad-ermitteln-einer-datei.html)

Matze 13. Jan 2004 11:46

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:
http://www.delphipraxis.net/internal...ht=laufwerk%2A


Die Patitionen allein bekommst du, indem du nur die
Delphi-Quellcode:
DRIVE_FIXED
beachtest.

himitsu 13. Jan 2004 12:09

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);

Alex_ITA01 13. Jan 2004 13:29

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:
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;
//Aufruf
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

Alex_ITA01 13. Jan 2004 13:50

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

himitsu 13. Jan 2004 13:59

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:
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
oder einfach die aktuelle Position anzeigenlassen, dadurch dauert es aber noch mal etwas länger
(das aktielle Verzeichnis wird in der Fensterüberschrift von Form1 angezeigt)
Code:
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
[add]
Menno, bin heute wohl ständig zu langsam :wall:

Alex_ITA01 14. Jan 2004 08:00

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:
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;
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?

MFG Alex

Matze 14. Jan 2004 08:03

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:
[b]Code := RootFolder + SR.Name; [/b]<----habe das so gemacht
stehen hast, kannst du den Pfad + Dateinamen herbekommen, das stimmt auf jeden Fall.

Anstatt deinem Code, kannst du testweise auch mal
Delphi-Quellcode:
Edit1.Text := RootFolder + SR.Name
schreiben, dann siehst du, ob das wenigstens stimmt.

Alex_ITA01 14. Jan 2004 08:17

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

Alex_ITA01 14. Jan 2004 08:32

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 04:57 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz