AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

Ein Thema von juergen · begonnen am 27. Mai 2018 · letzter Beitrag vom 22. Sep 2022
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.075 Beiträge
 
Delphi 10.3 Rio
 
#1

TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 21:25
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
834 Beiträge
 
#2

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 21:55
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)...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 21:56
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
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.075 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 22:01
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.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.437 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 22:07
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!
Gruß vom KodeZwerg

Geändert von KodeZwerg (27. Mai 2018 um 22:12 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 22:18
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

Geändert von EWeiss (27. Mai 2018 um 22:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.437 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 22:22
Ich hab da eher das "$" Zeichen in Verdacht aber der TE soll mal was dazu sagen
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 22:30
Ich hab da eher das "$" Zeichen in Verdacht aber der TE soll mal was dazu sagen
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

Geändert von EWeiss (11. Jul 2019 um 15:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.075 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 22:35
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: TFileStream crasht bei Dateiname=285 Zeichen mit Unicode

  Alt 27. Mai 2018, 22:37
Naja super wenn es jetzt geht.
Aber die frage bleibt wie erstellst du den Pfad unter Windows ?
Bei mir geht es nicht.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:40 Uhr.
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