Nieuws
Foto's
Artikelen
Componenten
Applicaties
Kleinkunst

Delphi - Bestanden kopiëren, verplaatsen, verwijderen en hernoemen

De Windows Shell (= Verkenner) bevat verschillende Windows API functions om bestanden en mappen te kopiëren, hernoemen, verplaatsen en verwijderen. Het voordeel van deze routines t.o.v. de oudere CopyFile, DeleteFile, MkDir, ... is dat ze eventueel ook een progress-window met animatie laten zien. Bovendien bevatten deze functies meer opties.

Zo zullen de Shell functies bij het kopiëren van een bestand naar een onbestaande map vragen om deze map aan te maken. De functie CopyFile zou gewoon niets uitvoeren. Ook bij het verwijderen van een bestand heb je de mogelijkheid om dit te laten verplaatsen naar de prullenmand. Met DeleteFile is het bestand onherroepelijk weg.

De API functie SHFileOperation heeft vrij veel parameters, maar als je dit in functies giet en er een bibliotheekje van maakt dan zijn deze functies onmisbaar om in Win95/98/ME/NT/2000/XP met bestanden te werken.

Kopiëren van bestanden

// ----------------------------------------------------------------
// Copy files
// ----------------------------------------------------------------
function scShellCopyFile(FormHandle : THandle; StrFrom, StrTo : string; 
  BlnSilent : Boolean = False) : Boolean;
var
  F : TShFileOpStruct;
begin
  F.Wnd:=FormHandle;
  F.wFunc:=FO_COPY;
  F.pFrom:=PChar(StrFrom+#0);
  F.pTo:=PChar(StrTo+#0);
  F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
  if BlnSilent then
    F.fFlags := F.fFlags or FOF_SILENT;
  if ShFileOperation(F) <> 0 then
    result:=False
  else
    result:=True;
end;

Verplaatsen van bestanden

// ----------------------------------------------------------------
// Move files
// ----------------------------------------------------------------
function scShellMoveFile(FormHandle : THandle; StrFrom, StrTo : string; 
  BlnSilent : Boolean = False) : Boolean;
var
  F : TShFileOpStruct;
begin
  F.Wnd:=FormHandle;
  F.wFunc:=FO_MOVE;
  F.pFrom:=PChar(StrFrom+#0);
  F.pTo:=PChar(StrTo+#0);
  F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
  if BlnSilent then
    F.fFlags := F.fFlags or FOF_SILENT;
  if ShFileOperation(F) <> 0 then
    result:=False
  else
    result:=True;
end;

Verwijderen van bestanden

// ----------------------------------------------------------------
// Delete file or folder
// ----------------------------------------------------------------
function scShellDeleteFile(FormHandle : THandle; StrFile : String; BlnSilent : Boolean = False; 
  BlnConfirmation : Boolean = True; BlnUndo : Boolean = True) : Boolean;
var
  F : TShFileOpStruct;
begin
  F.Wnd:=FormHandle;
  F.wFunc:=FO_DELETE;
  F.pFrom:=PChar(StrFile+#0);
  if BlnUndo then
    F.fFlags := FOF_ALLOWUNDO;
  if not BlnConfirmation then
    F.fFlags := FOF_NOCONFIRMATION;
  if BlnSilent then
    F.fFlags := F.fFlags or FOF_SILENT;
  if ShFileOperation(F) <> 0 then
    result:=False
  else
    result:=True;
end;

Hernoemen van bestanden

// ----------------------------------------------------------------
// Rename files
// ---------------------------------------------------------------- 
function scShellRenameFile(FormHandle : THandle; StrFrom, StrTo : string; <br />  BlnSilent : Boolean = False) : Boolean;
var
  F : TShFileOpStruct;
begin
  F.Wnd:=FormHandle;
  F.wFunc:=FO_RENAME;
  F.pFrom:=PChar(StrFrom+#0);
  F.pTo:=PChar(StrTo+#0);
  F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
  if BlnSilent then
    F.fFlags := F.fFlags or FOF_SILENT;
  if ShFileOperation(F) <> 0 then
    result:=False
  else
    result:=True;
end;