AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein MAX_PATH - Wie Datei kopieren oder Path kürzen?
Thema durchsuchen
Ansicht
Themen-Optionen

MAX_PATH - Wie Datei kopieren oder Path kürzen?

Ein Thema von dGeek · begonnen am 10. Sep 2016 · letzter Beitrag vom 10. Sep 2016
Antwort Antwort
dGeek
(Gast)

n/a Beiträge
 
#1

MAX_PATH - Wie Datei kopieren oder Path kürzen?

  Alt 10. Sep 2016, 13:35
Ich möchte gerne Dateien kopieren. Das klappt wunderbar, bis aber eine Datei kommt deren Dateiname länger als MAX_PATH ist.
Jetzt weiß ich nicht, ob die komplette Länge von z.B. "C:\meni_verzeichnis\verzeichnis2\verzeichnis3\dat ei.txt" geprüft wird, oder nur die Dateinamen-Länge von "datei.txt".

Wie dem auch sei: ein paar Dateien haben so lange Namen, dass nicht kopiert werden kann.

Wie kann ich die Dateien trotzdem kopieren?

Meine erste Idee:
Prüfen, ob Dateiname > MAX_PATH ist und wenn ja, den Dateinamen in das 8.3 DOS-Format umwandeln. Oder bin ich auf dem Holzweg?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: MAX_PATH - Wie Datei kopieren oder Path kürzen?

  Alt 10. Sep 2016, 13:41
Die Beschreibung zu CopyFile gibt da einen Hinweis:

Zitat:
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#3

AW: MAX_PATH - Wie Datei kopieren oder Path kürzen?

  Alt 10. Sep 2016, 13:45
Ich benutze BlockRead und BlockWrite (für große Dateien mit callback) und an anderer Stelle SHFileOperation für kleine Dateien unter 10MB.
Darf man da trotzdem "\\?\" vor den Namen hängen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: MAX_PATH - Wie Datei kopieren oder Path kürzen?

  Alt 10. Sep 2016, 14:12
Ich benutze BlockRead und BlockWrite (für große Dateien mit callback) und an anderer Stelle SHFileOperation für kleine Dateien unter 10MB.
Darf man da trotzdem "\\?\" vor den Namen hängen?
So, wie ich das verstanden habe, gilt das für jede Pfadangabe. Probiers doch mal aus.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: MAX_PATH - Wie Datei kopieren oder Path kürzen?

  Alt 10. Sep 2016, 14:15
Nochmal zum Nachlesen: Naming Files, Paths, and Namespaces

Zitat:
The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. This type of path is composed of components separated by backslashes, each up to the value returned in the lpMaximumComponentLength parameter of the GetVolumeInformation function (this value is commonly 255 characters). To specify an extended-length path, use the "\\?\" prefix. For example, "\\?\D:\very long path".
Da in den Delphi-Unicode-Versionen in der Regel immer die Unicode-Variante der Windows-API verwendet wird, sollte das eigentlich immer funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#6

AW: MAX_PATH - Wie Datei kopieren oder Path kürzen?

  Alt 10. Sep 2016, 14:26
SHFileOperation scheint nicht damit kompatibel zu sein.

Ich habe nun von SHFileOperations auf IFileOperation umgesattelt.
Genauer gesagt wird, wenn das Programm mindestens unter Windows Vista ausgeführt wird, IFileOperation verwendet. Sonst SHFileOperation.
  Mit Zitat antworten Zitat
Antwort Antwort


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