Delphi - Bestanden kopiëren, verplaatsen, verwijderen en hernoemen
- Datum:
- Auteur: Stefan Cruysberghs
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;