Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Auf Windowsordnerstruktur zugreifen (https://www.delphipraxis.net/148733-auf-windowsordnerstruktur-zugreifen.html)

eragon123 7. Mär 2010 12:17


Auf Windowsordnerstruktur zugreifen
 
Ich hab leider gar keine Idee wie man sowas macht, deshalb konnte ich das jetzt auch in keine Kategorie einordnen.
Meine Aufgabe: ich habe eine List mit Namen.

Jetzt will ich in einem bestimmten Verzeichniss, z.B. E:\\ suchen ob Ordner mit den Namen aus der Liste dort vorhanden sind. Wenn nicht sollen sie erstellt werden. Wie geht das? Hat da jemand einen Tipp für mich?

PS Das Verzeichnis ist ein Netzlaufwerk, das einem Buchstaben zugeordnet ist, falls das was ändern sollte.

daywalker9 7. Mär 2010 12:20

Re: Auf Windowsordnerstruktur zugreifen
 
FindFirst

FindFirst solltest du dir mal angucken siehe link

samso 7. Mär 2010 12:48

Re: Auf Windowsordnerstruktur zugreifen
 
Delphi-Quellcode:
//------------------------------------------------------------------------------
// Eine Verzeichnisliste lesen - im Ergebnis werden nur die Dateinamen übergeben
//------------------------------------------------------------------------------

function AppendDirList(const DirList: TStrings;
                       const Path: String): Integer;
var
  SearchResult: TSearchRec;
  Error: Integer;
begin
  Result := -1;
  if DirList<>nil
  then begin
    Error := FindFirst(Path, faDirectory, SearchResult);
    try
      While Error=0 do
      begin
        if (SearchResult.Attr and faDirectory = faDirectory) and
           (SearchResult.Name <> '.') and (SearchResult.Name <> '..')
        then begin
          DirList.Add(SearchResult.Name);
        end;
        Error := FindNext(SearchResult);
      end;
    finally
      FindClose(SearchResult);
    end;
    Result := DirList.Count;
  end;
end;

function GetDirList(const DirList: TStrings;
                    const Path: String): Integer;
begin
  Result := -1;
  if DirList<>nil
  then begin
    DirList.Clear;
    Result := AppendDirList(DirList, Path);
  end;
end;

DeddyH 7. Mär 2010 13:16

Re: Auf Windowsordnerstruktur zugreifen
 
Ich hab das eher andersherum verstanden. Die Verzeichnisliste existiert bereits und die darin enthaltenen Verzeichnisse sollen ggf. angelegt werden.
Delphi-Quellcode:
var Verz: string;
begin
  for i := 0 to Namensliste.Count - 1 do
    begin
      Verz := IncludeTrailingPathDelimiter(angegebenes_Verzeichnis) + Namensliste[i];
      if not (DirectoryExists(Verz) or ForceDirectories(Verz)) then
        ShowMessage(Format('Verzeichnis "%s" kann nicht angelegt werden',[Verz]));
    end;
end;

SirThornberry 7. Mär 2010 14:55

Re: Auf Windowsordnerstruktur zugreifen
 
@DeddyH: So rum hab ich das ganze auch verstanden. Trotzdem würde ich so heran gehen das ich mir den Inhalt des Verzeichnisses auflisten lasse und in der Ergebnismenge dann schaue was nicht vorhanden ist. Denn eine Prüfung ob ein Verzeichnis existiert greift auch jedesmal auf das Dateisystem zu weshalb ich denke das es länger dauert jedesmal DirectoryExists aufzurufen.
Zudem sollte DirectoryExists nicht notwendig sein bei Verwendung von ForceDirectorys da dies intern auch prüft was bereits vorhanden ist und was nicht.

DeddyH 7. Mär 2010 15:05

Re: Auf Windowsordnerstruktur zugreifen
 
Dann lassen wir DirectoryExists halt weg, ich hatte das ja nur im Editor heruntergetippt.

eragon123 7. Mär 2010 15:08

Re: Auf Windowsordnerstruktur zugreifen
 
Also die beiden letzten die geantwortet haben haben mich richtig verstanden ;).
Meine Idee:

Delphi-Quellcode:
for i := 1 to high (verzeichnisnamen) do
begin
  if not verzeichnisname[i] existiert then
  anlegen;
end;
So soll das aussehen, da fehlt mir jetzt halt nur der Code für.

Meine Fragen: was machen denn jetzt
IncludeTrailingPathDelimiter
DirectoryExists
ForceDirectories

Ok das 2. kann ich mir vorstellen. Man übergibt einen Pfad und bekommt heraus ob es den gibt. Und die anderen beiden?

DeddyH 7. Mär 2010 15:11

Re: Auf Windowsordnerstruktur zugreifen
 
Delphi-Referenz durchsuchenIncludeTrailingPathDelimiter, Delphi-Referenz durchsuchenForceDirectories

eragon123 7. Mär 2010 16:17

Re: Auf Windowsordnerstruktur zugreifen
 
Zitat:

Zitat von DeddyH
Ich hab das eher andersherum verstanden. Die Verzeichnisliste existiert bereits und die darin enthaltenen Verzeichnisse sollen ggf. angelegt werden.
Delphi-Quellcode:
var Verz: string;
begin
  for i := 0 to Namensliste.Count - 1 do
    begin
      Verz := IncludeTrailingPathDelimiter(angegebenes_Verzeichnis) + Namensliste[i];
      if not (DirectoryExists(Verz) or ForceDirectories(Verz)) then
        ShowMessage(Format('Verzeichnis "%s" kann nicht angelegt werden',[Verz]));
    end;
end;

Ah ok jetzt verstehe ich das. Danke. Muss das Zeichen am Ende des Strings unbedingt sein oder warum nutzt du IncludeTrailingPathDelimiter? Und: macht der in dieser Schreibweise automatisch Forcedirectories wenn DirectoryExcists false ist?

DeddyH 7. Mär 2010 17:46

Re: Auf Windowsordnerstruktur zugreifen
 
Es ist schon ein Unterschied, ob Du "C:\Verzeichnis" oder "C:\Verzeichnis\" übergibst, oder? Und ja, ForceDirectories versucht, die angegebene Verzeichnisstruktur anzulegen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 Uhr.

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