AGB  ·  Datenschutz  ·  Impressum  







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

TStringList Max String länge

Ein Thema von EWeiss · begonnen am 11. Mär 2009 · letzter Beitrag vom 12. Mär 2009
Antwort Antwort
Seite 2 von 3     12 3      
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: TStringList Max String länge

  Alt 11. Mär 2009, 16:17
Zitat von Klaus01:
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
Danke werd mal schaun ob es hilft.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: TStringList Max String länge

  Alt 11. Mär 2009, 21:19
Ich übergebe den Pfad nun mit GetShortName ist das einzigste was mir einfällt.
Kann aber nicht sagen ob das jetzt wieder mit anderen Sprachen probleme macht.

Was mir noch aufgefallen ist und ebenfalls mit zu dem Problem beiträgt ist
das diese DLL "CosmicBelt.svp" ein exception auslößt.

Wie kann man bei LoadLibrary das exception abfangen ohne das es zum crash kommt ?
Delphi-Quellcode:
  try
    dll := LoadLibrary(PAnsiChar(APlugin));
  except
    exit;
  end;
hilft nix kracht trotzdem.

gruss Emil
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: TStringList Max String länge

  Alt 11. Mär 2009, 22:27
Zu deinem Problem mit dem Pfad:

Zitat:
In Windows API MAX_PATH is 260 characters long. WinRAR supports only this length. At the same time, Windows Unicode API support 32767 character long filen paths. Microsoft promised to include support of long naming in whidbey but I don't know if it's supported with .net applications now. To access file paths using this API program should call the file using \\?\ prefix before the path. The only reason, I guess, why most programs are still using old APIs are compatibility reason although, to tell the truth, a very few programs are now support non-NT OSes and the security as they say that this limitation is used intentionally to prevent buffer overflow attacks. Thus having the full path of 260 we are actually limited to a 248 character-long directory name as the remaining 12 are needed for the filename.
See this article for details. See this for the _MAX_XXXX constant description and their values. By the way there is an interesting bug within the next Visual Studio codenamed Orcas posted just a few days ago.
Quelle: hier #13

Zu deiner letzten Frage (eigentlich nur eine Frage pro Thread )
Versuch mal GetLastError auszulesen. Kann natürlich sein, das die DLL Fehler in ihrer DllMain()-Procedur hat und dort die Exception auftritt. Diese kannst du dann natürlich nicht abfangen.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: TStringList Max String länge

  Alt 11. Mär 2009, 22:37
Zu 1. Danke das ist gelößt mit GetShortName. Mehr kann ich da eh nicht machen
Zu 2. Die DLL wurde gepackt daher kam es zum Exception. Hab sie gelöscht und mir einen vermerk gemacht.

Vielen Dank.

gruss Emil
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: TStringList Max String länge

  Alt 11. Mär 2009, 22:59
1. MSDN: Maximum Path Length
2. Delphi-Referenz durchsuchenSafeLoadLibrary()
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

Re: TStringList Max String länge

  Alt 11. Mär 2009, 23:01
Zitat von EWeiss:
Ich übergebe den Pfad nun mit GetShortName ist das einzigste was mir einfällt.
Du musst aber aufpassen:
Zitat von Windows PSDK:
When an application calls this function and specifies a path on a volume that does not support 8.3 aliases, the function fails with ERROR_INVALID_PARAMETER if the path is longer than 67 bytes.
Man kann die Unterstützung für kurze Dateinamen unter NTFS abschalten. Du solltest auf alle Fälle den Fehler abfangen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

Re: TStringList Max String länge

  Alt 11. Mär 2009, 23:39
Zitat von Luckie:
Zitat von EWeiss:
Ich übergebe den Pfad nun mit GetShortName ist das einzigste was mir einfällt.
Du musst aber aufpassen:
Zitat von Windows PSDK:
When an application calls this function and specifies a path on a volume that does not support 8.3 aliases, the function fails with ERROR_INVALID_PARAMETER if the path is longer than 67 bytes.
Man kann die Unterstützung für kurze Dateinamen unter NTFS abschalten. Du solltest auf alle Fälle den Fehler abfangen.
Danke für die Infos war mir nicht bekannt .. gut zu wissen.
Denke das müßte reichen.
Delphi-Quellcode:
procedure SearchFiles(PluginType: byte;
                      path: string;
                      recurse: BOOL; var List :TStrings);
var
  sr : TSearchrec;
  tmpPath: string;

begin

 if (Path[length(path)] <> '\') then
    path := path + '\';

 try
     tmpPath := GetShortName(Path);
 except
     if GetlastError = ERROR_INVALID_PARAMETER then
       tmpPath := Path;
 end;
@Mutze1
1. da war ich schon daher auch die Idee mit GetShortName
2. Habe es mal mit SafeLoadLibrary() versucht das gleiche problem
Die DLL ist mit Petite Kompremiert http://www.un4seen.com/petite/
dieser scheint die Datei zerschossen zu haben oder es ist einfach nicht möglich diese dann mit LoadLibrary zu laden.

trotzdem danke muss halt alles versuchen.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

Re: TStringList Max String länge

  Alt 12. Mär 2009, 00:13
Denk aber daran, dass API-Funktionen keine Exception werfen, sondenr einen Fehlercode zurückgeben. Deine Funktion GetShortName muss also im Fehlerfall eine Exception werfen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

Re: TStringList Max String länge

  Alt 12. Mär 2009, 00:16
Zitat von Luckie:
Denk aber daran, dass API-Funktionen keine Exception werfen, sondenr einen Fehlercode zurückgeben. Deine Funktion GetShortName muss also im Fehlerfall eine Exception werfen.
Verstehe ich jetzt nicht was du meinst.. sorry
Ist was falsch an meiner Error prüfung ?

EDIT:
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;
gruss Emil
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#20

Re: TStringList Max String länge

  Alt 12. Mär 2009, 08:57
Zitat von EWeiss:
@Mutze1
1. da war ich schon daher auch die Idee mit GetShortName
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?

Zitat von EWeiss:
2. Habe es mal mit SafeLoadLibrary() versucht das gleiche problem
Ich hatte gehofft, dass es ein MS Visual C Startup Code in der DLL ist, der das CW der FPU umsetzt, ansonsten hätte es keine Auswirkungen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:54 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