Einzelnen Beitrag anzeigen

Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#13

AW: SHFileOperation: Wie Dateien mit sehr langem Dateinamen kopieren?

  Alt 28. Feb 2011, 10:25
Okay, so scheint es zu funktionieren:
Delphi-Quellcode:
function ShellFileCopy(const aSource, aDest: string): Integer;
var
  SH: TSHFileOpStructW;
  sSource, sDest: WideString;
const
  sPrefix: WideString = '\\?\';
  sUNCNewPrefix: WideString = '\\?\UNC';
  sUNCPrefix: WideString = '\\';
begin
  if not StartsText(sUNCPrefix, aSource) then
     sSource := ExpandFileName(aSource);

  if not StartsText(sUNCPrefix, aDest) then
     //sDest := ExtractFilePath(ExpandFileName(aDest));
    sDest := ExpandFileName(aDest);

  if (Length(sSource) >= MAX_PATH)
     and not StartsText(sPrefix, sSource) then
     if StartsText(sUNCPrefix, sSource) then
        sSource := sUNCNewPrefix + sSource
    else
       sSource := sPrefix + sSource;

  if (Length(sDest) >= MAX_PATH)
     and not StartsText(sPrefix, sDest) then
     if StartsText(sUNCPrefix, sDest) then
        sDest := sUNCNewPrefix + sDest
    else
       sDest := sPrefix + sDest;

  ZeroMemory(@SH, SizeOf(SH));

  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;
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?

Geändert von HeikoAdams ( 1. Mär 2011 um 08:08 Uhr)
  Mit Zitat antworten Zitat