PDA

View Full Version : نحوه حذف پوشه با محتویاتش



babak_delphi
شنبه 01 تیر 1387, 00:14 صبح
سلام
با دستور rmdir میشه یک فولدر یا به عبارت دیگه یک دایرکتوری را حذف کرد
ولی اگر پوشه خالی نباشه این کار با مشکل مواجه میشه
کد یا دستوری هست که بتوان یک پوشه را با تمام فایلها و subfolder هاش حذف کرد؟
البته اگر روشی به غیر از FindNext باشه بهتره
ممنون

sma_mohseni
شنبه 01 تیر 1387, 10:59 صبح
به نظر میرسه که راه منطقی اش این باشه که یک تابع بنویسی که ابتدا محتوایات داخل شاخه را پاک بکنه و بعد شاخه اصلی رو حذف کنه

Mah6447
شنبه 01 تیر 1387, 11:26 صبح
از توابع زیر می توانید استفاده کنید :


uses
ShellApi;

برای کپی دایرکتوری :

function CopyDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_COPY;
fFlags := FOF_FILESONLY;
pFrom := PChar(fromDir + #0);
pTo := PChar(toDir)
end;
Result := (0 = ShFileOperation(fos));
end;

برای انتقال دایرکتوری :

function MoveDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_MOVE;
fFlags := FOF_FILESONLY;
pFrom := PChar(fromDir + #0);
pTo := PChar(toDir)
end;
Result := (0 = ShFileOperation(fos));
end;

برای حذف دایرکتوری :

function DelDir(dir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_DELETE;
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
pFrom := PChar(dir + #0);
end;
Result := (0 = ShFileOperation(fos));
end;

مثال :

procedure TForm1.Button1Click(Sender: TObject);
begin
if cCopyDir('d:\download', 'e:\') = True then
ShowMessage('Directory copied.');
end;