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/)
-   -   Delphi TFileStream crasht bei Dateiname=285 Zeichen mit Unicode (https://www.delphipraxis.net/196510-tfilestream-crasht-bei-dateiname%3D285-zeichen-mit-unicode.html)

juergen 27. Mai 2018 22:25

TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Hallo zusammen,


...
edt1.Text:= 'c:\Lieder\$$$$$$_sdsfdsfdsfdsfdsfsd321fdsfdsf31ds f1dsf1ds3f1dsf1ds3f1ds31fds31f1dsf1dsf31dsf321ds1f ds31fds321f1dsf1dsf31ds32f1ds1f3ds1f3d2sf1ds32f1ds 3fds3f1ds3f1ds31fds1f312dsf312dsf31ds1fds31fds32f1 dsf1ds3f1ds3f12ds13fds132fsed\27 - Ieva Zasimauskaitė (Lithuania) - When We're Old.mp3' // das sind 285 Zeichen...


Delphi-Quellcode:
var
  FS: TFileStream;
begin
  try
    FS := TFileStream.Create(edt1.Text, fmOpenRead);
  finally
    FS.Free;
  end;
end;

Laut Delphi Hilfe kann ich keine Grenze bei TFileStream wegen Pfadlänge oder Unicodezeichen erkennen.

Weiß jemand warum Delphi crasht und die Meldung bringt: Datei nicht gefunden?


Vielen Dank schon mal im Voraus!

mensch72 27. Mai 2018 22:55

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
NTFS Wikipedia:

...Dateinamen können... bis zu 255 Zeichen lang sein und aus fast beliebigen Unicode-Zeichen bestehen...
...eine maximale Länge des kompletten Pfadnamens von 32.767 Zeichen (allerdings beschränkt Windows bis zur Version Windows 10 Build 14352 die nutzbare Länge auf 260 Zeichen)...

EWeiss 27. Mai 2018 22:56

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Kann mir nur vorstellen das der Pfad einfach zu lang ist.
Mit dem FileStream hat das nichts zu tun.

MAX_PATH ?? 260.. du hast aber 285
oops da war jemand schneller.

gruss

juergen 27. Mai 2018 23:01

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Windows lässt die Pfadlänge > 260 zu und andere Programme kommen auch mit der Pfadlänge > 259 klar.
Ich hatte nun angenommen, dass TFileStream mit der Pfadlänge > 259 kein Problem hätte.
Im Moment weiß ich noch nicht wie ich das umgehen kann.

KodeZwerg 27. Mai 2018 23:07

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Wenn Du ein commandprompt öffnest und da diese Zeichenkette reinkopierst und Return drückst, was passiert?

edit
Zitat:

Hello,

Good news ! you can reach 260 !

BUT:

not with folders.

Because of the following rule: You should always be able to create a file with 12 chars in the name (including the extension, something like 8.3)

So, we have this:

c:\very-long-folder-name => MAX Length=(260-12-1) = 247. The trailing minus 1 is for the invisible NUL terminator.

Then, you can create a file in this folder with a name like this: 12345678.txt

So, we have our 260 chars for the whole path, including the file name, the extension, and the NUL terminator.

More details: https://msdn.microsoft.com/en-us/lib...47(VS.85).aspx
Also Verzeichnisname = 247 Zeichen sind max.
Helfen kann es den Namen in den ShortName umzuwandeln!

EWeiss 27. Mai 2018 23:18

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Ich denke es sind die Leerzeichen zwischen dem String.
Zitat:

sdsfdsfdsfdsfdsfsd321fdsfdsf31ds f1dsf1ds3f1dsf1ds3f1ds31fds31f1dsf1dsf31dsf321ds1f
Zudem sind in dem String ungültige Zeichen enthalten die Windows so nicht akzeptiert.
Kann jetzt aber nicht sagen ob der String den du hier reinkopiert hast verändert wird.

Windows meldet mir das die Datei nicht gefunden wird.

Zitat:

Helfen kann es den Namen in den ShortName umzuwandeln!
Wäre eine Möglichkeit ja..

gruss

KodeZwerg 27. Mai 2018 23:22

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Ich hab da eher das "$" Zeichen in Verdacht aber der TE soll mal was dazu sagen:wink:

EWeiss 27. Mai 2018 23:30

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403115)
Ich hab da eher das "$" Zeichen in Verdacht aber der TE soll mal was dazu sagen:wink:

Nun ja ich kann die Datei gar nicht erst erstellen frage mich wie er das macht.
Gebe ich den String so unter Ausführen im Startmenü ein wird alles abgeschnitten was länger ist wie 260


gruss

juergen 27. Mai 2018 23:35

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Problem gelöst!
Es ist die Verwendung des MAX_Path die angewendet wird, wenn eine direkte Pfadangabe verwendet wird!
Wenn ich ein '\\?\' vor dem Pfad stelle, erkennt Windows dass es ein UNC Path ist (Windows Plattform abhängig). UNC hat *nicht* die Einschränkung von MAX_Path und es wird auf die entsprechende Windows-API umgeleitet.
Gut zu wissen...

...
edt1.Text:= '\\?\' + 'c:\Lieder\$$$$$$_sdsfdsfdsfdsfdsfsd321fdsfdsf31ds f1dsf1ds3f1dsf1ds3f1ds31fds31f1dsf1dsf31dsf321ds1f ds31fds321f1dsf1dsf31ds32f1ds1f3ds1f3d2sf1ds32f1ds 3fds3f1ds3f1ds31fds1f312dsf312dsf31ds1fds31fds32f1 dsf1ds3f1ds3f12ds13fds132fsed\27 - Ieva Zasimauskaitė (Lithuania) - When We're Old.mp3' // das sind 285 Zeichen...


So funktioniert nun alles.

Danke für die entsprechenden Hinweise auf MAX_PATH, weil ich nur nach TFileStream gesucht hatte! :dp:

EWeiss 27. Mai 2018 23:37

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode
 
Naja super wenn es jetzt geht.
Aber die frage bleibt wie erstellst du den Pfad unter Windows ?
Bei mir geht es nicht.

gruss


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

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf