AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Debugger-Exception bei Einsatz von Stringlist

Ein Thema von grebaldi · begonnen am 11. Feb 2008 · letzter Beitrag vom 11. Feb 2008
Antwort Antwort
Benutzerbild von grebaldi
grebaldi

Registriert seit: 5. Jan 2006
10 Beiträge
 
#1

Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 18:14
Halli Hallo!

Ich möchte in meinem Programm erreichen, dass mittels einer Prozedur alle Namen der Dateien eines Verzeichnisses ohne Dateinamenerweiterung in einer Listbox angezeigt werden. Um nun aber die Dateien an sich weiterzuverwenden, soll der volle Dateipfad jeder Datei parallel in ein TStrings-Objekt eingefügt werden.

Folgende Prozedur habe ich dafür gefertigt:
Delphi-Quellcode:
procedure ListeDir(Path: string; FileList: TStrings; ext:boolean);
var
  SR: TSearchRec;
begin
  if FindFirst(Path + '*.*', faAnyFile, sr) = 0 then
  begin
    repeat
       if ((sr.Attr and faDirectory) <> faDirectory) and
          (sr.Name <> '.') and
          (sr.Name <> '..') then
      begin

        if MatchesMask(sr.Name,'*.avi') OR MatchesMask(sr.Name,'*.mpeg') OR MatchesMask(sr.Name,'*.mpg') then
        begin
        if ext then begin sr.name:= StringReplace(sr.name,'.avi','',[rfReplaceAll]);
        sr.name:= StringReplace(sr.name,'.mpg','',[rfReplaceAll]);
        sr.name:= StringReplace(sr.name,'.mpeg','',[rfReplaceAll]);
        end;
        FileList.Append(sr.Name);
        end;
      end;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;
Diese werden dann folgendermaßen aufgerufen (dateiliste:TStrings):
Delphi-Quellcode:
 ListDir('c:\irgendwas',Listbox1.Items,true);
ListDir('c:\irgendwas',dateiliste,false);
Wenn ich dies so verwende, wird zwar alles einwandfrei compiliert, wird die Prozedur aber in der Laufzeit aufgerufen, brignt der Debuger mir eine Fehlermeldung (Typ C0000005) und mein Programm bleibt stehen.

Habt ihr 'ne Idee, wie ich das ganze effizienter machen kann, bzw.überhaupt erstmal zum Funktionieren bringen könnte?
Und Gott sprach: "Es werde Licht!"
@Delphi

if god='Mach Licht!' then make_light;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 19:02
effizenter? Ja, da habe ich ein paar Anmerkungen:

1. MatchesMask() ist recht aufwendig - vor allem wenn du nur die Endung vergleichen willst. Dann nutze lieber einmalig Delphi-Referenz durchsuchenExtractFileExt() und vergleiche diese.
2. Du willst die Dateiendung entfernen. Dein StringReplace würde diese Endung auch entfernen wenn sie irgendwo in der Mitte des Dateinamens auftreten. Von daher nutze lieber die dafür gedachte Delphi-Referenz durchsuchenChangeFileExt().

So und warum es bei dir mit einer AV im Kernel/kernel32.dll abstürzt, kann ich von den hier geposteten Ausschnitten nicht erkennen. Hier scheint es grundlegend erstmal in Ordnung zu sein. Ich könnte mir nur vorstellen, dass du "dateiliste" nirgendwo instanziiert hast.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 19:07
Herzlich willkommen in der Delphi-PRAXiS, grebaldi.

SR solltest du nur auslesen:

Delphi-Quellcode:
procedure ListDir(const Path: string; FileList: TStrings; ext: Boolean);
var
  SR: TSearchRec;
begin
  Assert(Assigned(FileList), 'Gotcha!'); // EDIT
  if FindFirst(IncludeTrailingPathDelimiter(Path) + '*.*', faAnyFile, sr) = 0 then
  begin
    repeat
      if ((sr.Attr and faDirectory) <> faDirectory)
      and (sr.Name <> '.')
      and (sr.Name <> '..')
      and ({StrUtils.}AnsiIndexText(ExtractFileExt(sr.Name), ['.avi', '.mpg', '.mpeg']) >= 0) then
        if ext
          then FileList.Append(ChangeFileExt(sr.Name, '')) // EDIT
          else FileList.Append(sr.Name);
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von grebaldi
grebaldi

Registriert seit: 5. Jan 2006
10 Beiträge
 
#4

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 20:06
Danke für die schnellen Antworten.

Ich habe die Verbesserungen vorgenommen,aber das Problem besteht weiterhin. dateiliste ist z.Z. in der Typendeklaration als public deklariert. Jedoch scheint es egal zu sein, wo ich sie deklariere (bei dieser variablen bin ich mir ohnehin nicht sicher wohin damit).
Und Gott sprach: "Es werde Licht!"
@Delphi

if god='Mach Licht!' then make_light;
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 20:07
Ganz dumme Frage, hast Du auch die Variable die Du an FileList übergibst erstellt ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von grebaldi
grebaldi

Registriert seit: 5. Jan 2006
10 Beiträge
 
#6

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 20:14
Ja, dateiliste ist erstellt. Der Compiler sagt wie gesagt auch nichts an, ich bekomme nur während der Laufzeit eine Debugger-Exception.
Und Gott sprach: "Es werde Licht!"
@Delphi

if god='Mach Licht!' then make_light;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 21:27
Hallo,

ich habe den Code in Beitrag #3 etwas überarbeitet. Die erste Änderung verschafft uns Klarheit, ob die übergebene StringList instanziert wurde. Die zweite Änderung trägt den fehlenden zweiten Parameter von ChangeFileExt() nach, worauf mich Muetze1 aufmerksam gemacht hat - Mein Dank geht an Thomas.

Freundliche Grüße
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 21:35
Hallo,

deklariert <> instanziiert.

Deklaration

Delphi-Quellcode:
var
  dateiliste: TStringList; // (NICHT TStrings)
Instanziierung

dateiliste:= TStringList.Create; Heiko
PS:
Irgendwo wird dateiliste.Free hoffentlich
auch noch aufgerufen
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von grebaldi
grebaldi

Registriert seit: 5. Jan 2006
10 Beiträge
 
#9

Re: Debugger-Exception bei Einsatz von Stringlist

  Alt 11. Feb 2008, 22:27
Vielen, vielen Dank! Der letzte Beitrag war die Lösung. Ich war nämlich slbst so blöd, TStrings wie einen array zu behandeln und habe deswegen nichts instanziiert. Ich bedanke mich für die Hilfe!

Beste Grüße, grebaldi
Und Gott sprach: "Es werde Licht!"
@Delphi

if god='Mach Licht!' then make_light;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 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