![]() |
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 ;) |
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 |
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 |
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:
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)
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; Gruß |
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 |
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; |
Re: Alle Ordner und Dateien aus Freigabe auflisten
Dann frag doch einch mal mit GetLastError den Fehlerwert von FindFirst ab.
Delphi-Quellcode:
Genau deswegen liefrn API Funktionen ja Fehlercodes zurück bzw. gibt es GetLastError.
if FindFirst = 0 then
begin end else ShowMessage(SysErrorMessage(getLastError)); |
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^^ |
Re: Alle Ordner und Dateien aus Freigabe auflisten
könntest du mal eine demo reinstellen ich kriegs irgendwie nicht hin :(
|
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 18:30 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