Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TDirectory.GetFiles EInvalidePointer wenn Path leer (https://www.delphipraxis.net/193265-tdirectory-getfiles-einvalidepointer-wenn-path-leer.html)

Kostas 10. Jul 2017 11:51

TDirectory.GetFiles EInvalidePointer wenn Path leer
 
Hallo Zusammen,

wenn im Pfad keine gesuchte Dateien vorhanden sind, wird eine Exception vom Typ EInvalidePointer "Ungültige Zeigeroperation" gefeuert.
Ist mindestens eine gesuchte Datei vorhanden gibt es keine Exception.
Hat jemand eine Idee warum?


Delphi-Quellcode:

if not GetDirFilesEx(QuellPfad, '*.pdf', MyFileList, TSearchOption.soTopDirectoryOnly, false)then exit;

function GetDirFilesEx(const StartDir,
                       SearchPattern: string;
                       out MyFileList : TStringList;
                       SearchOption:TSearchOption;
                       FileNameOnly:Boolean):Boolean;
var
  LList: TStringDynArray;
  I: Integer;
  LSearchOption: TSearchOption;

begin
  result := False;

  LList := TDirectory.GetFiles(StartDir, SearchPattern, SearchOption);


  for i := 0 to Length(LList)-1 do
  begin
    if FileNameOnly
    then MyFileList.Add(ExtractFileName(LList[i]))
    else MyFileList.Add(LList[i]);
  end;

  Result := MyFileList.Count>0;

end;

Der schöne Günther 10. Jul 2017 11:59

AW: TDirectory.GetFiles EInvalidePointer wenn Path leer
 
Kann ich nicht nachvollziehen, der Code läuft mit den Beispielparametern von dir durch. Kannst du ein vollständiges Beispiel posten? Ist dein
Delphi-Quellcode:
MyFileList
ordentlich initialisiert?

TiGü 10. Jul 2017 12:04

AW: TDirectory.GetFiles EInvalidePointer wenn Path leer
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1376377)
Ist dein
Delphi-Quellcode:
MyFileList
ordentlich initialisiert?

Entweder der Kaffee wirkt nicht, oder ich vermisse auch sowas wie MyFileList := TStringList.Create; :gruebel:

Zacherl 10. Jul 2017 12:09

AW: TDirectory.GetFiles EInvalidePointer wenn Path leer
 
Genau aus solchen Gründen sollte man es immer vermeiden Objekte innerhalb einer Funktion zu erzeugen. Besser außerhalb erzeugen, Funktion aufrufen und außerhalb wieder freigeben. Dann gibt es keine Fragen der Zuständigkeit:
Delphi-Quellcode:
List := TStringList.Create;
try
  GetDirFilesEx(.., List);
  ..
finally
  List.Free;
end;

Kostas 10. Jul 2017 12:14

AW: TDirectory.GetFiles EInvalidePointer wenn Path leer
 
Hallo Zusammen,

das Create ist vorhanden. Interessant ist, NUR wenn im QuellPfad keine PDFs vorhanden sind kommt die Exception ansonsten nicht!
Die Ursache ist vermutlich eine andere. Ich werde weiter schauen. Danke für die Bestätigung.

Delphi-Quellcode:
     ...
     MyFileList:=TStringList.Create;
     try

        QuellPfad := IncludeTrailingBackslash(deQuelle.Text);
        if not GetDirFilesEx(QuellPfad, '*.pdf', MyFileList, TSearchOption.soTopDirectoryOnly, false)then exit;
        ...
     finally
        MyFileList.free;
     end;{try}

Der schöne Günther 10. Jul 2017 12:21

AW: TDirectory.GetFiles EInvalidePointer wenn Path leer
 
Dann setze beim Parametertyp der StringListe doch bitte das
Delphi-Quellcode:
out
weg, das ist missverständlich. Man erwartet eigentlich dass man einen nicht initialisierten Zeiger übergibt und der bei Erfolg mit einer gültigen TStringList-Instanz belegt ist.

Und du hast doch einen Debugger. Wo tritt die Exception denn genau auf?

Kostas 10. Jul 2017 12:36

AW: TDirectory.GetFiles EInvalidePointer wenn Path leer
 
Hallo Güther,

sorry die Function funkt einwandfrei. Der Fehler ist außerhalb.

Sorry dass ich es nicht gleich gesehen habe und Euch bemüht habe.


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