Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Alle Ordner und Dateien aus Freigabe auflisten (https://www.delphipraxis.net/78256-alle-ordner-und-dateien-aus-freigabe-auflisten.html)

n0b0dy 1. Okt 2006 23:10


Alle Ordner und Dateien aus Freigabe auflisten
 
Guten Abend Zusammen,

ich habe ein Problem beim Auflisten aller Ordner und Dateien aus einer Freigabe im Netzwerk (Rechte natürlich vorhanden)
Habe mich mit FindFirst und FindNext auseinandergesetzt, so wie ich es bei lokalen Ordnern machen würde, jedoch klappt das so garnicht. Wie macht man das denn übers Netzwerk?

also möchte zB '\\ip\c$' eingeben, und er soll mir dann alle Ordner und Dateien aufzeigen.


Aber erstmal Gute Nacht ;)

n0b0dy 2. Okt 2006 22:38

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
*push*

Hat denn keiner ne Ahnung? :gruebel: Muss doch irgendwie möglich sein, auf Freigaben zuzugreifen, und Ordner und Dateilisten davon zu erstellen :? :roll:


Mfg

marabu 3. Okt 2006 09:53

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
Hallo nobody,

bei \\server-or-ip\c$ handelt es sich um eine administrative Freigabe des Rechners - hast du dir die benötigten Rechte für den Zugriff besorgt? Hast du die Fehlercodes bei deinen Zugriffsversuchen ausgewertet?

Grüße vom marabu

n0b0dy 3. Okt 2006 10:11

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
hi,

ja Rechte habe ich. Also das Programm läuft schon unter dem AdminAccount.

aber zum Authentifizieren habe ich auch schon diese FUnktion von Luckie genommen. Damit greift man auf eine Freigabe zu mit Admin User und passwd und "erklär" dem, dass man die nötigen Rechte hat ;)

Delphi-Quellcode:
function ConnectToNetworkDrive(LocalName: string; RemoteName: string; Username: string; Password: string;
  RestoreAtLogon: boolean): DWORD;
var
  NetResource           : TNetResource;
  dwFlags               : DWORD;
begin
  dwFlags := 0;
  ZeroMemory(@NetResource, sizeof(TNetResource));
  with NetResource do begin
    dwType := RESOURCETYPE_ANY;
    lpLocalName := PChar(LocalName);
    lpRemoteName := PChar(RemoteName);
    lpProvider := nil;
  end;

  if (RestoreAtLogon) then
    dwFlags := dwFlags or CONNECT_UPDATE_PROFILE;

  Result := WNetAddConnection2(NetResource, PChar(Password), PChar(Username), dwFlags);
end;
Ich weiß halt nicht wie ich nach dem Connecten weiter machen soll und die Dateien und Ordner auflisten kann. Ich möchte KEIN Netzlaufwerk auf meinem PC erstellen, sondern nur auf eine Netzwerkfreigabe (halt auch Standardfreigabe) zugreifen (Ordner, Dateien auflisten und ggf. Dateien kopieren)


Gruß

marabu 3. Okt 2006 11:43

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
Das Suchen nach Dateien machst du so wie immer (FindFirst, FindNext), lediglich statt eines drive letter verwendest du dann den UNC Namen. Mit dem Verbindungsaufbau über WNetAddConnection2() holst du dir ja nur das passende security token.

Grüße, marabu

n0b0dy 3. Okt 2006 12:09

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
ja genau das ist ja das Problem. Wenn ich den UNC-Namen eingebe, passiert einfach nichts.
Kein Fehler, kein nichts... :?

Folgende Funktion zum Listen der Dateien / ORdner:
Delphi-Quellcode:
procedure FindAllFiles(FileList: TStrings; RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
  procedure LFindAllFiles(AParentFolder: String);
  var LSearchRec: TSearchRec;
  begin
    if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
    begin
      repeat
        if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
        begin
          if LSearchRec.Attr and faDirectory = faDirectory then
          begin
            if AddFolderNames and
               (IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
              FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
            if Recurse then
              LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
          end
          else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
            FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
begin
  Mask := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;

Luckie 3. Okt 2006 12:15

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
Dann frag doch einch mal mit GetLastError den Fehlerwert von FindFirst ab.
Delphi-Quellcode:
if FindFirst = 0 then
begin

end
else
  ShowMessage(SysErrorMessage(getLastError));
Genau deswegen liefrn API Funktionen ja Fehlercodes zurück bzw. gibt es GetLastError.

n0b0dy 3. Okt 2006 12:22

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
Ja kein Fehler, dass is ja das komische :(. Krieg ne leere StringList zurück.
Ich bin total verzweifelt. Ich mach nun das ganze nochmal neu, weil irgendwo muss ein flüchtigkeitsfehler bei der Ausgabe sein oder so....

Anders kann ich mir das nicht vorstellen.


[ EDIT ]
man oh mann. jetzt gehts :roll: :gruebel: :gruebel: :gruebel:
ich habe einfach alles noch einmal neu zusammengebastelt und nun gehts.
ich weiß nicht wieso. :?
das is doch genau das gleich wie vorher ... hab mich seit 2 tagen rumgequält, und irgendwie funzt es jetzt, obwohl nix anders is als beim ersten mal
bin platt^^

pacman1986 4. Okt 2006 23:13

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
könntest du mal eine demo reinstellen ich kriegs irgendwie nicht hin :(

n0b0dy 5. Okt 2006 14:47

Re: Alle Ordner und Dateien aus Freigabe auflisten
 
Funktion:
Delphi-Quellcode:
procedure FindAllFiles(FileList: TStrings; RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
  procedure LFindAllFiles(AParentFolder: String);
  var LSearchRec: TSearchRec;
  begin
    if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
    begin
      repeat
        if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
        begin
          if LSearchRec.Attr and faDirectory = faDirectory then
          begin
            if AddFolderNames and
               (IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
              FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
            if Recurse then
              LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
          end
          else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
            FileList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
begin
  Mask := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;

Aufruf:
Delphi-Quellcode:
var
  Lst: TStrings;
begin
  Lst := TStringList.Create;
 
  FindAllFiles(Lst, '\\pc-name\c$', '*', False, True, True);

  ShowMessage(Lst.Text);

  Lst.Free;
end;

Grüße
n0b0dy


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 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