Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Probleme mit ExtractFileName (https://www.delphipraxis.net/66357-probleme-mit-extractfilename.html)

Cyberbob 28. Mär 2006 23:29


Probleme mit ExtractFileName
 
Hallo DPler,

ich habe eine kleines Problem mit dem Befehl ExtractFileName

Ich habe ein Dynamisches Array of TFileName (es heisst FileNames). Wenn ich mir nun den Ersten Buchstaben des Dateinamen anzeigen lassen will, benutze ich
Delphi-Quellcode:
ExtractFileName(FileNames[i][1])
was auch Funktioniert
Nun mein problem. Wenn ich den ersten Buchstaben des 1. Feldes mit dem des 2. Feldes vergleichen will, erhalte ich eine AV. Dies mache ich so:

Delphi-Quellcode:
if ExtractFileName(FileNames[i])[1] < ExtractFileName(FileNames[i+1])[1] then
begin
  Bla... Blub...
end; {if}
Warum weigert sich ExtractFileName hier?

dizzy 28. Mär 2006 23:53

Re: Probleme mit ExtractFileName
 
Ich nehme mal stark an, dass das in einer For-Schleife passiert, und dass dein letzter Durchgang für High(Filenames) ist gell? Und dann rechnest du i+1 als Index, wobei i im letzten Durchgang ja schon gleich High(Filenames) ist ;)

Cyberbob 28. Mär 2006 23:55

Re: Probleme mit ExtractFileName
 
Ich hab "for i := 0 to Length(FileNames) - 2 do" benutzt
es wird direct beim ersten durchgang eine AV ausgelöst, auch wenn ich 10 elemente ich Array hab

x000x 29. Mär 2006 00:04

Re: Probleme mit ExtractFileName
 
Moin moin,

dann wird es am Inhalt liegen. Prüfe doch mal die Länge von FileNames[x]?!
Delphi-Quellcode:
var s: string;
begin
   s := '';
   // Hier gibts ne AV, da s = ''
   ShowMessage(s[1]);
end;

s.h.a.r.k 29. Mär 2006 00:06

Re: Probleme mit ExtractFileName
 
Bin ich einfach nur blind oder stimmt da was nicht in deinem Code:
Delphi-Quellcode:
ExtractFileName(FileNames[i][1])
// wie will den das gehen?!
// Bie einem Pfad (z.B. C:\Test\Test.txt) bekommst du hier den Character "C" heraus, wenn ich mich nicht täusche!
// Schau mal an wo die Klammer ist!

if ExtractFileName(FileNames[i])[1] < ExtractFileName(FileNames[i+1])[1] then
begin
  Bla... Blub...
end; {if}
// Hier müsste es eventuell klappen, nur würde ich vorher die einzelnen Filenames in separate Strings abspeichern
// Also so:

s1 := ExtractFileName(FileNames[i]);
s2 := ExtractFileName(FileNames[i+1]);
if s1[1] < s2[1] then
begin
  Bla... Blub...
end; {if}

x000x 29. Mär 2006 00:10

Re: Probleme mit ExtractFileName
 
auch das wird nicht klappen, wenn FileNames[x] leer ist...
Test:
Delphi-Quellcode:
var s1, s2: string;
begin
   s1 := ExtractFileName('');
   s2 := ExtractFileName('');
   if s1[1] < s2[1] then
     ShowMessage('AV');
end;

s.h.a.r.k 29. Mär 2006 00:16

Re: Probleme mit ExtractFileName
 
Sorry, hast recht! Ist halt schon etwas spät :wink:

aber das hier müsste doch zu 100% funktionieren:
Delphi-Quellcode:
var
  s1, s2 : String;
begin
  s1 := ExtractFileName(FileNames[i]);
  s2 := ExtractFileName(FileNames[i+1]);
  if (length(s1) > 0) and (length(s2) > 0) then
  begin
    if s1[1] < s2[1] then
    begin
      //Bla... Blub...
    end;
  end
  else
    // Kein gültiger Dateipfad
end;

Cyberbob 29. Mär 2006 00:33

Re: Probleme mit ExtractFileName
 
Ich hab folgenden Code im Quelltext stehen!

Delphi-Quellcode:
procedure TfrmPlayer.btnSortClick(Sender: TObject);
var
  z : LongInt;
  Speicher : TFileName;
  Changed : Boolean;
begin
  Repeat
    Changed := False;
    For z := 0 To Length(FileNames) - 2 do
    begin
      if ExtractFileName(FileNames[z])[1] > ExtractFileName(FileNames[z+1])[1] then
      begin
        Speicher := FileNames[z];
        FileNames[z] := FileNames[z+1];
        FileNames[z+1] := Speicher;
        Changed := True;
      end;
    end;
  Until Changed = False;

  lbxFiles.Clear;
  For z := 0 To Length(FileNames) - 1 do
    lbxFiles.Items.Add(ExtractFileName(FileNames[z]));
end;
Ich habs in einem anderen Projekt auch schon so gelöst und erhalte plötzlich überall diese Meldungen. Früher gings mal!

x000x 29. Mär 2006 00:53

Re: Probleme mit ExtractFileName
 
Laut s.h.a.r.k:
Delphi-Quellcode:
procedure TfrmPlayer.btnSortClick(Sender: TObject);
var
  z : LongInt;
  Speicher : TFileName;
  Changed : Boolean;
  s1, s2 : String;
begin
  Repeat
    Changed := False;
    For z := 0 To Length(FileNames) - 2 do
    begin
      s1 := ExtractFileName(FileNames[z]);
      s2 := ExtractFileName(FileNames[z+1]);
      if (length(s1) > 0) and (length(s2) > 0) then
        if s1[1] > s2[1] then
        begin
          Speicher := FileNames[z];
          FileNames[z] := FileNames[z+1];
          FileNames[z+1] := Speicher;
          Changed := True;
        end;
    end;
  Until Changed = False;

  lbxFiles.Clear;
  For z := 0 To Length(FileNames) - 1 do
    lbxFiles.Items.Add(ExtractFileName(FileNames[z]));
end;
Zitat:

Ich habs in einem anderen Projekt auch schon so gelöst und erhalte plötzlich überall diese Meldungen. Früher gings mal!
Es ist ja nix falsches daran, wenn du sicherstellst, dass FileNames[z] auch einen String mit mind. 1 Zeichen enthält. Evtl. ist/war in deinem anderen Projekt FileNames[z] auch immer gefüllt...

EDIT: wegen übermüdung gelöscht :-)

Cyberbob 29. Mär 2006 01:08

Re: Probleme mit ExtractFileName
 
****Endlosschleife hat sich ja erledigt*****



Die Elemente des Arrays sind gefüllt. Das Programm füllt die sich selbst und da wird auf Leerstrings geachtet und diese dann ausgelassen. (Habs auch mal mit ShowMessage kontrolliert)

EDIT: Hab jetzt Delphi deinstalliert (auch die ganzen packages und den delphi6-ordner gelöscht), habs anschließend neu installiert und siehe da ... es geht. werd jetzt nochmal nach und nach die neuen versionen aller packages neu installieren und schaun, was passiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.
Seite 1 von 2  1 2      

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