NTFS supports pathes up to 32767 unicode characters.
QuoteMicrosoft Windows uses the following types of paths:
local file system (LFS), such as C:\File,
uniform naming convention (UNC), such as \\Server\Volume\File,
Long UNC or UNCW, such as \\?\C:\File or \\?\UNC\Server\Volume\File.
I have to say that the windows standard tools like the explorer do not work with such long pathes.
And most programs do not (yet) support these also. Therefore this is a special issue.
Peter has provided a first implementation of a Large-Path Library. It substitutes the PB-commands with Commands that will enable you to utilize that large pathes.
[Theo: Attachement changed to newer version, 26.12.2014]
Download Wide-Path Library (http://smart-package.com/pubfiles/Wide%20Unicode.rar)
;) Theo ich muss dir widersprechen. Das Ding ist absolut kugelsicher. Hatte keinen einzigen Ausfall die letzten beiden Jahre! hat alles kopiert und gelöscht ordnungsgemäß ohne Fehler!
Theo, I have to disagree with you. This thing is absolutely bulletproof. Had not a single failure, the last two years! has copied everything and deleted correctly without any errors!
Grüße Peter ;D
I have now checked Peters Code and it has shown up that there were no bugs in the whole library.
Peters code is remarkable bug free. I have also corrected the Link and reduced the filesize to ~14 MB.
I have removed some obsolete posts so we can concentrate on further issues.
Habe die Function WideCopyDir verändert. So das eine Datei die schon existiert und Readonly ist auch überschrieben wird, und nicht abgebrochen wird :)
Have changed the Function WideCopydir. So that the file already exists and is read-only will be overwritten, and will not be canceled
FUNCTION WideCopyDir ALIAS "WideCopyDir"(BYVAL pSource AS WSTRING, BYVAL Pdest AS WSTRING, BYVAL bFailIfExists AS LONG, OPT BYREF recusive AS LONG) EXPORT AS LONG
LOCAL fcount AS LONG
LOCAL i AS LONG
LOCAL f AS WSTRING
LOCAL d1 AS WSTRING
LOCAL p1 AS WSTRING
LOCAL f1 AS WSTRING
LOCAL l AS LONG
LOCAL lstring AS ASCIZ * 32000
wsplitf psource, d1, p1, f1
Psource = RTRIM$(psource, "\")
l = LEN(d1) + LEN(p1) + 1
pdest = TRIM$(pdest)
IF RIGHT$(pdest, 1) <> "\" THEN
pdest = pdest + "\"
END IF
IF WideIsFolder(psource) THEN
WideMkdir(pdest + f1)
LOCAL dirclass AS WidedirRead
LET dirclass = CLASS "WideDirReadCom"
IF ISOBJECT(dirclass) THEN
IF NOT ISMISSING(recusive) THEN
fcount = dirclass.WideDirReadX(pSource + "\*", %F_NOT_PREV_DIR OR %F_NOT_THIS_DIR, recusive)
ELSE
fcount = dirclass.WideDirReadX(pSource + "\*", %F_NOT_PREV_DIR OR %F_NOT_THIS_DIR)
END IF
IF WideisFolder(pdest + LTRIM$(f1, "\")) THEN
FOR i = 1 TO dirclass.dircount()
f = Pdest + LTRIM$(MID$(dirclass.FName(i), l), "\")
IF (dirclass.FGetattr(i) AND %FILE_ATTRIBUTE_DIRECTORY) THEN
WideMkdir f
ELSE
IF WideCopyFile (dirclass.FName(i), f, bFailIfExists) = 0 THEN
IF bFailIfExists = 0 THEN
WideSetAttr(f, widegetattr(f) AND &HFFFFFFFC)
IF WideCopyFile (dirclass.FName(i), f, bFailIfExists) <> 0 THEN
ITERATE FOR
END IF
dirclass = NOTHING
EXIT FUNCTION
END IF
END IF
END IF
NEXT i
FUNCTION = %true
END IF
END IF
dirclass = NOTHING
END IF
END FUNCTION