Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TStringList Max String länge (https://www.delphipraxis.net/130628-tstringlist-max-string-laenge.html)

EWeiss 11. Mär 2009 13:34


TStringList Max String länge
 
Vielleicht hat jemand eine Idee.
Wenn ich ca 100 Dateien zu einer TStringList addieren möchte bei dem der Pfad zu diesen extrem lang ist
kracht es in Delphi gewaltig beim Debugen.

Was ich dann machen muss ist soviele Dateien entfernen so das die maximale stringlänge nicht überschritten wird.
Irgendwo kann es das aber nicht sein.

Hab mir überlegt nur den Dateinamen zu übergeben dann hab ich aber das problem
das ich dann keine recursive suche mehr durchführen kann da in diesen Fall der Pfad nicht mehr bekannt ist.

Habe da schon so viel versucht scheitere aber immer an der länge des Pfads(string)
Also die Frage wie würdet ihr das lösen ?

gruss Emil

nuclearping 11. Mär 2009 13:36

Re: TStringList Max String länge
 
Anderer Vorschlag:

TList mit PChar statt TStringList.

hoika 11. Mär 2009 13:37

Re: TStringList Max String länge
 
Hallo,

beim Debuggen oder auch zur Laufzeit.
was heisst "krachen"


Heiko

Bernhard Geyer 11. Mär 2009 13:40

Re: TStringList Max String länge
 
Ich tippe eher darauf das das "Krachen" in der Stringlist durch einen anderen Fehler verursacht wird.
Kannst du ein Minimalbeispiel posten wo dieses Verhalten auftritt?

EWeiss 11. Mär 2009 13:50

Re: TStringList Max String länge
 
Beispiel:
Zitat:

C:\Dokumente und Einstellungen\Emil Weiss\Desktop\BassVisWrapper_SVN\BassVis_Wrapper_E xample\BassVisWrapper_Example\bin\Debug\splugins\
In dem Pfad befinden sich 100 Odner mit den Namen der Plugins die recursiv durchsucht werden.
Das ist einer.

Zitat:

C:\Dokumente und Einstellungen\Emil Weiss\Desktop\BassVisWrapper_SVN\BassVis_Wrapper_E xample\BassVisWrapper_Example\bin\Debug\splugins\A cidspunk
da angehängt noch das Plugin selbst.
Zitat:

C:\Dokumente und Einstellungen\Emil Weiss\Desktop\BassVisWrapper_SVN\BassVis_Wrapper_E xample\BassVisWrapper_Example\bin\Debug\splugins\A cidspunk\Acidspunk.svp
Dieser String wird getrennt durch einen Delemiter der übergeben werden kann .. default ist Commalist
Nun kann man sich vorstellen wie lang der String wird wenn ich 100 Ordner addiere.

Zitat:

beim Debuggen oder auch zur Laufzeit.
was heisst "krachen"
Zugriffs verletzung lesen von 00000000 und so weiter
Beim Debugen
Wenn die Exe Kompiliert ist also außerhalb der IDE gestarte wird funktioniert es.

Das ist der aufruf
Delphi-Quellcode:
function GlobalFindPlugins(Kind: TBASSVIS_KIND_T;
                           Vispath: PAnsiChar;
                           flags: DWord;
                           Delimiter: AnsiChar = ','): PAnsiChar;

Zitat:

TList mit PChar statt TStringList.
War meine vorherige version geht auch nicht.
Was ich noch dabei sagen muss die liste wird aus einer DLL übergeben

gruss Emil

EWeiss 11. Mär 2009 13:54

Re: TStringList Max String länge
 
Zitat:

Zitat von Bernhard Geyer
Ich tippe eher darauf das das "Krachen" in der Stringlist durch einen anderen Fehler verursacht wird.
Kannst du ein Minimalbeispiel posten wo dieses Verhalten auftritt?

Wie schon gesagt tritt auf wenn der Strin seine Max länge erreicht hat.
Kann das nur beseitigen indem ich einige Ordner entferne.

Der Code... Beispiele ist schlecht da aus DLL
changed kein code problem

Gruss EMil

Bernhard Geyer 11. Mär 2009 13:58

Re: TStringList Max String länge
 
Kann es eher sein das hier eine Windows-Eigenheit zuschlägt das Dateinamen/Pfad nur aufgelöst werden können wenn sie < 255 Zeichen sind bzw. weniger als 255 Zeichen vom aktuellen pfad entfernt sind?

EWeiss 11. Mär 2009 14:03

Re: TStringList Max String länge
 
Zitat:

Zitat von Bernhard Geyer
Kann es eher sein das hier eine Windows-Eigenheit zuschlägt das Dateinamen/Pfad nur aufgelöst werden können wenn sie < 255 Zeichen sind bzw. weniger als 255 Zeichen vom aktuellen pfad entfernt sind?

Ja .. Das ist so
Deshalb meine Frage wie ich das anderes lösen kann.
Am Code liegt es nicht .. der ist in Ordnung da ändert auch nichts dran wenn ich TList verwende.

Wie gesagt wenn ich nur das Plugin übergeben hätte ich kein problem mehr mit der länge des String
Kann aber dann den Pfad nicht übergeben was bedeute das recursive suchen wäre dann sinnlos.

gruss Emil

Klaus01 11. Mär 2009 14:50

Re: TStringList Max String länge
 
Hallo Emil,

wie es ausschaut, wirst Du wohl nicht viel anderes
übrigbleiben als Dir Dein eigenes ExtractFilePath
zu schreiben.

Die Routinen könnten in etwa so aussehen:

Delphi-Quellcode:
function extractFileName(s:string):String;
var
  i: Integer;
begin
  i:= length(s);
  while (i > 0) and (s[i] <> '\') do
    begin
      dec(i);
    end;
  result := copy(s,i+1,length(s)-i+1);
end;

function extractFilePath(s:string):String;
var
  i: Integer;
begin
  i:= length(s);
  while (i > 0) and (s[i] <> '\') do
    begin
      dec(i);
    end;
  result := copy(s,1,i-1);
end;
Kann man sicherlich noch eleganter machen ...

Grüße
Klaus

Muetze1 11. Mär 2009 16:02

Re: TStringList Max String länge
 
(sorry)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Seite 1 von 3  1 23      

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 by Thomas Breitkreuz