Okay, mit dieser Funktion sollte dann also das Kopieren von Dateien mit sehr langem Dateinamen klappen:
Delphi-Quellcode:
function ShellFileCopy(
const aSource, aDest:
string): Integer;
var
SH: TSHFileOpStructW;
sSource, sDest: WideString;
begin
ZeroMemory(@SH, SizeOf(SH));
sSource := aSource;
sDest := ExtractFilePath(aDest);
if (Length(sSource) > MAX_PATH)
then
if (Copy(sSource, 1, 2) = '
\\')
then
sSource := '
\\?\UNC' + sSource
else
sSource := '
\\?\' + sSource;
if (Length(sDest) > MAX_PATH)
then
if (Copy(sDest, 1, 2) = '
\\')
then
sDest := '
\\?\UNC' + sDest
else
sDest := '
\\?\' + sDest;
try
with SH
do
begin
Wnd := 0;
wFunc := FO_COPY;
pFrom := PWideChar(sSource + #0);
pTo := PWideChar(sDest + #0);
fFlags := FOF_ALLOWUNDO
or FOF_NOCONFIRMATION
or FOF_NOCONFIRMMKDIR
or
FOF_SILENT;
end;
Result := SHFileOperationW(SH);
finally
ZeroMemory(@SH, SizeOf(SH));
end;
end;
Oder ist mir da irgend ein Denkfehler unterlaufen?