Delphi-PRAXiS
Seite 3 von 3     123   

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 12. Mär 2009 08:18

Re: TStringList Max String länge
 
@Muetze
Delphi-Quellcode:
Und warum nutzt du dann nicht die im Text angegebene Möglichkeit über UNC Angaben um wenigstens auf eine Pfadtiefe von 32767 Zeichen zu kommen?
Weil ich zu meiner schande gestehen muss das ich nur die hälfte von dem verstehe was da steht.
Habe nie English gelernt das einzige was ich verstehe ist Denglish aus der Werbung und (Computer English) oder wie man es sonst nennen will.

gruss Emil

Klaus01 12. Mär 2009 08:22

Re: TStringList Max String länge
 
Guten Morgen Emil,

eingentlich brauchst Du nur \\?\ vor die PfadStrings schreiben,
denn dann weiß Windows dass ein langer Pfadname folgt.

Delphi-Quellcode:
s:=extractFileExt('\\?\'+Aplugin);
Grüße
Klaus

EWeiss 12. Mär 2009 08:38

Re: TStringList Max String länge
 
Zitat:

Zitat von Klaus01
Guten Morgen Emil,

eingentlich brauchst Du nur \\?\ vor die PfadStrings schreiben,
denn dann weiß Windows dass ein langer Pfadname folgt.

Delphi-Quellcode:
s:=extractFileExt('\\?\'+Aplugin);
Grüße
Klaus

Guten Morgen Klaus
Danke für die Info..

Und dann verkürzt Window den Pfad ?

gruss Emil

Klaus01 12. Mär 2009 08:42

Re: TStringList Max String länge
 
Zitat:

Zitat von EWeiss
Guten Morgen Klaus
Danke für die Info..

Und dann verkürzt Window den Pfad ?

gruss Emil

wenn ich das richtig verstanden habe:
Nö, die ExctractFileExt ruft eine Win-Api auf und die kommt dann mit den langen Pfadnamen zurecht.

Grüße
Klaus

Luckie 12. Mär 2009 08:44

Re: TStringList Max String länge
 
Zitat:

Zitat von EWeiss
Ach so verstehe jetzt was du meinst
Hier mal die Funktion aus dem Forum hier...

Delphi-Quellcode:
var
  ErrorCode: DWord;
Delphi-Quellcode:
function GetShortName(sLongName: string): string;
var
  sShortName:   string;
  nShortNameLen: Integer;
begin
  SetLength(sShortName, MAX_PATH);
  nShortNameLen := GetShortPathName(PChar(sLongName), PChar(sShortName), MAX_PATH - 1);
  if (0 = nShortNameLen) then
  begin
    ErrorCode := ERROR_INVALID_PARAMETER; // Du meinst das hier in etwa ? 
    Exit;
  end;
  SetLength(sShortName, nShortNameLen);
  Result := sShortName;
end;

Richtig. Und damit ist dieser try-except-Block:
Delphi-Quellcode:
try
     tmpPath := GetShortName(Path);
except
     if GetlastError = ERROR_INVALID_PARAMETER then
       tmpPath := Path;
end;
überflüssig.

Aber ich würde in der Funktion GetShortName eine Exception werfen.

EWeiss 12. Mär 2009 08:57

Re: TStringList Max String länge
 
Zitat:

Zitat von Luckie

Richtig. Und damit ist dieser try-except-Block:
Delphi-Quellcode:
try
     tmpPath := GetShortName(Path);
except
     if GetlastError = ERROR_INVALID_PARAMETER then
       tmpPath := Path;
end;
überflüssig.

Aber ich würde in der Funktion GetShortName eine Exception werfen.

Ich mache hier nichts anderes als den alten Pfad mit langen Namen weiter zu leiten sollte der Kurze nicht unterstützt werden.
Warum wäre dieser Block dann ungültig ?.

Edit:
Grmm .. glaube du meinst lediglich den Block nicht die abfrage.
Delphi-Quellcode:
     
tmpPath := GetShortName(Path);
if GetlastError = ERROR_INVALID_PARAMETER then
  tmpPath := Path;
das wäre es dann.
end Edit

Zitat:

Aber ich würde in der Funktion GetShortName eine Exception werfen.
werfen ?
Hab ich noch nichts mit zu tun gehabt
Wie geht das ?


@Klaus01
Zitat:

wenn ich das richtig verstanden habe:
Nö, die ExctractFileExt ruft eine Win-Api auf und die kommt dann mit den langen Pfadnamen zurecht.
Das ist aber sehr unsicher. Oder ?

Hab jetzt verschiedene möglichkeiten.
Die frage ist was nun am besten verwenden.

gruss Emil

Luckie 12. Mär 2009 09:27

Re: TStringList Max String länge
 
So könnte es zum Beispiel gehen:

Delphi-Quellcode:
resourcestring
  rsEInvalidParameter = 'Der Parameter %s ist ungültig';

type
  EInvalidParameter = class(Exception)
  public
    constructor CreateFmt(Parameter: string);
  end;

{ EInvalidParameter }

constructor EInvalidParameter.CreateFmt(Parameter: string);
begin
  inherited CreateFmt(rsEInvalidParameter, [Parameter]);
end;

procedure TForm1.RaiseDemoException;
begin
  Raise EInvalidParameter.CreateFmt('Foobar');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    RaiseDemoException;
  except
    on E: EInvalidParameter do ShowMessage(E.Message);
  end;
end;
Ich habe eine eigene Exceptionklasse abgeleitet, weil ich keine passende, fertige Exception gefunden habe.

EWeiss 12. Mär 2009 09:37

Re: TStringList Max String länge
 
@Luckie
Danke schön ..
Dann kann ich die noch ausbauen für etwaige andere überprüfungen.

gruss Emil

Luckie 12. Mär 2009 09:55

Re: TStringList Max String länge
 
Richtig du kannst dir da dann weitere Exceptions für deine speziellen Fälle deklarieren. Habe ich bei meiner Adress-Datenbank auch gemacht. Da habe ich zum Beispiel die Exeptions:

Delphi-Quellcode:
type
  EArgumentNull = class(Exception)
  public
    constructor CreateFmt(const MethodeName: String; const Parameter: String);
  end;

  EXMLError = class(Exception)
  public
    constructor CreateFmt(const MethodeName: String; const Msg: String; const Parameter: String);
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Seite 3 von 3     123   

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