Ich habe den Eindruck, dass bei FileGetSize die Pfad- und Dateinamenlänge zusammen nicht 255 Zeichen überschreiten darf. Auf jeden Fall gehts bei 241 Zeichen noch, bei 273 aber nicht mehr. Was kann man da machen, um auch die Größe von Dateien herauszubekommen die längere Pfade haben?
FileGetSize Pfadlänge
-
- [ offen ]
-
diepfeile -
15. Januar 2014 um 01:02 -
Erledigt
-
-
Das hat nichts mit FileGetSize() zu tun, sondern mit Windows bzw. dessen FileSystem.
Einzige Lösung die mir z.Zt. einfällt wäre, ggf. in die jeweilige Unterverzeichnisse mit FileChangeDir(".\Unterverzeichnis") zu wechseln und dann die Datei mit FileGetSize() abzufragen. Ich gehe aber ohne es getestet zu haben davon aus, das auch dann eine Fehlermeldung erscheinen wird.
Trotzdem viel Spaß beim probieren.
-
Ich gehe jetzt auch einfach mal davon aus, das FileCHangeDir() dich nicht weiter bringt.
Sofern du ein NTFS fromatiertes Laufwerk verwendest, könntest du allternativ das Kommandozeilentool "subst" verwenden um ein virtuelles Laufwerk zu erstellen. Dazu musst du deinen Pfad nur unter 256 Zeichen kürzen und den maximal zulässigen Ordner per "subst" einbinden. Von dort aus solltest du dann auf die Datei zugreifen können, da der direkte Pfad zur Datei lediglich "x:\der\rest\des\ursprungspfades\" ist.
Reine Theorie aber zumindest auf NTFS formatierten Laufwerken sollte das funktionieren. Denn dort wird diese 256 Zeichen Beschränkung nur vom Explorer festgelegt. Das Dateisystem selbst kennt sie nicht.
-
- Offizieller Beitrag
Ich zitiere mal Wikipedia:
Zitat
UNC-Adresse (lokal):Das Format für lokale Pfade unter Windows, also Daten, die auf dem verwendeten Rechner selbst vorhanden sind, ist:
\\?\C:\Daten oder \\.\C:\Daten
Diese Variante erhöht auch die maximale Pfadlänge von 255 Zeichen auf 32.767 Zeichen.
-
Man lernt nie aus. Danke Oscar!
-
Ich zitiere mal Wikipedia:
Bei FileGetSize und FileMove funktioniert es, aber DirRemove scheint es nicht zu klappen.
Selbst im Testscript nicht, die Ordner werden erstellt, aber nicht wieder gelöscht, obwohl error und extended je 0 sind.
Code$dir = "\\?\" & @WorkingDir DirCreate($dir & "\blup\test") DirRemove($dir & "\blup",1) ; klappt nicht ;DirRemove(@WorkingDir & "\blup",1) ; klappt MsgBox(0, "", "Value of @error is: " & @error & @CRLF & "Value of @extended is: " & @extended)
Funktioniert nur bis unter 255zeichen die restlichen Ordner fehlen sonst:
Code$dir = "\\?\" & @WorkingDir DirCreate($dir & "\123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789l123456789m\123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789l123456789m\123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i123456789j123456789k123456789l123456789m")
-
- Offizieller Beitrag
Es könnte sein, dass die AutoIt-Befehle nicht komplett UNC-konform arbeiten.
In dem Fall müsstest Du es mal mit den Befehlen der Windows-Commandozeile versuchen.