请各位高手帮助!(50分)

  • 主题发起人 主题发起人 aaet
  • 开始时间 开始时间
A

aaet

Unregistered / Unconfirmed
GUEST, unregistred user!
有那位高手能给我一个删除整个目录的函数,我试了很多种但都有问题!
 
搞定~~~分数我全要~~~

你建立一个目录,c:/tyn,里面放一堆的文件和文件夹。

function DoRemoveDir(sDirName:String):Boolean;
var
hFindFile:Cardinal;
tfile:String;
sCurDir:String;
bEmptyDir:Boolean;
FindFileData:WIN32_FIND_DATA;
begin
bEmptyDir:=True;
sCurDir:=GetCurrentDir;
SetLength(sCurDir,Length(sCurDir));
ChDir(sDirName);
hFindFile:=FindFirstFile('*.*',FindFileData);
if hFindFile<>INVALID_HANDLE_VALUE then
begin
repeat
tfile:=FindFileData.cFileName;
if (tfile='.') or (tfile='..') then
begin
bEmptyDir:=bEmptyDir and True;
Continue;
end;
bEmptyDir:=False;
if FindFileData.dwFileAttributes=
FILE_ATTRIBUTE_DIRECTORY then
begin
if sDirName[Length(sDirName)]<>'/' then
DoRemoveDir(sDirName+'/'+tfile)
else
DoRemoveDir(sDirName+tfile);
if not RemoveDirectory(PChar(tfile)) then
result:=false
else
result:=true;
end
else
begin
if not DeleteFile(PChar(tfile)) then
result:=false
else
result:=true;
end;
until FindNextFile(hFindFile,FindFileData)=false;
end
else
begin
ChDir(sCurDir);
result:=false;
exit;
end;
if bEmptyDir then
begin
ChDir('..');
RemoveDirectory(PChar(sDirName));
end;
ChDir(sCurDir);
result:=true;
end;

function DeleteDir(sDirName:String):Boolean;
begin
if Length(sDirName)<=0 then
exit;
Result:=DoRemoveDir(sDirName) and RemoveDir(sDirName);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if DeleteDir('c:/tyn') then
ShowMessage('ok');
end;
 
这分你是拿不到了!你也不试一试有没有用就给我抄来了!,你的函数只能删除里面的文件
对目录毫无用途!#¥¥#%◎#……%¥……
 
用shfileoperation函数
参数是 SHFILEOPSTRUCT 在API里有详细的帮助
typedef struct _SHFILEOPSTRUCT { // shfos
HWND hwnd;
UINT wFunc;
LPCSTR pFrom;
LPCSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCSTR lpszProgressTitle;
} SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;


 
看这里:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=488266

uses shellapi;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
Var
T:TSHFileOpStruct;
P:String;
begin
P:='d:/address';//这里改成你要删除的任意目录名
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
pTo:=nil;
fFlags:=FOF_ALLOWUNDO+FOF_NOCONFIRMATION+FOF_NOERRORUI;//标志表明允许恢复,无须确认并不显示出错信息
hNameMappings:=nil;
lpszProgressTitle:='正在删除文件夹';
fAnyOperationsAborted:=False;
End;
SHFileOperation(T);
end;
 
procedure deleteAll(DirName:string);
var
DirInfo: TSearchRec;
r : Integer;
begin
r := FindFirst(DirName+'/*.*', FaAnyfile, DirInfo);
while r = 0 do
begin
jishu:=jishu+1;
Form1.FlatProgressBar1.Position:=jishu;
if ((DirInfo.Attr and FaDirectory) = FaDirectory) and (DirInfo.Name<>'.')
and (DirInfo.Name<>'..')
then deleteAll(DirName + '/' + DirInfo.Name);
if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
(DirInfo.Attr and FaVolumeId <> FaVolumeID))
then DeleteFile(pChar(DirName+'/' + DirInfo.Name));
r := FindNext(DirInfo);
Form1.Label1.Caption:=DirName+'/'+DirInfo.Name;
end;
SysUtils.FindClose(DirInfo);
RemoveDirectory(pchar(DirName));
end;
 
接受答案了.
 
后退
顶部