如何清空c:/dir中的所有文件;直接删除,不要将文件移到回收箱(28分)

  • 主题发起人 主题发起人 laohe
  • 开始时间 开始时间
L

laohe

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将c:/dir中的文件清删除;
 
你可以建立一个。bat的文件,把你c:/dir中的文件名字写入。bat,然后用winexec执行。bat,
类似于“批处理”的东东~
我对文件操作不熟悉,不知道怎样得到c:/dir中全部的文件名字 ,你可以问问其他人~

删除不留痕迹的,参考代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var f: textFile;
begin
AssignFile(f,'delete.bat'); //建立文件
Rewrite(f);
Writeln(f,'del '+ 'c:/dir/ 文本文档.txt');// 写入你要删除的文件名字,其中 'c:/dir/文本文档.txt'是完整的路径和文件名称
//你也可以得到全部的文件名,用循环写入
Writeln(f,'del %0');
CloseFile(f);
WinExec('delete.bat',SW_HIDE); //执行bat文件
end;
-----------------
我用这个做过自杀程序! [:D][:D][:D]
 
我只是提供了一种方法,肯定还有另外更好的,
你做成功了,记得贴出来共享! [:D] 谢谢!

我关注!
 
如jrq所说,可写个批处理解决。
killall.bat,内容如下:
del c:/dir/. /y >nul
然后在Delphi里调用这个bat文件:WinExec('killall.bat',SW_HIDE);
 
uses shellapi
function DelTree(aDir:String):Boolean;
Var
FO:TSHFileOpStruct;
P:String;
begin
result:=false;
With FO do Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(aDir);
pTo:=nil;
fFlags:=FOF_ALLOWUNDO;
hNameMappings:=nil;
lpszProgressTitle:=PChar('正在删除文件夹'+aDir);
fAnyOperationsAborted:=False;
End;
if SHFileOperation(FO)=0 then result:=true;

end;

注意 fFlags:=FOF_ALLOWUNDO;可以改成以下几种标志的+
比如如果还不要提示确认,就fFlags:=FOF_ALLOWUNDO+FOF_NOCONFIRMATION;

FOF_ALLOWUNDO Preserves undo information, if possible.
FOF_CONFIRMMOUSE Not implemented.
FOF_FILESONLY Performs the operation only on files if a wildcard filename (*.*) is specified.
FOF_MULTIDESTFILES Indicates that the pTo member specifies multiple destination files (one for each source file) rather than one directory where all source files are to be deposited.
FOF_NOCONFIRMATION Responds with "yes to all" for any dialog box that is displayed.
FOF_NOCONFIRMMKDIR Does not confirm the creation of a new directory if the operation requires one to be created.
FOF_RENAMEONCOLLISION Gives the file being operated on a new name (such as "Copy #1 of...") in a move, copy, or rename operation if a file of the target name already exists.
FOF_SILENT Does not display a progress dialog box.
FOF_SIMPLEPROGRESS Displays a progress dialog box, but does not show the filenames.
FOF_WANTMAPPINGHANDLE Fills in the hNameMappings member. The handle must be freed by using the SHFreeNameMappings function.
 
楼上的方法是 可以将整个dir文件夹删除,并放入回收站中。
》》我想将c:/dir中的文件清删除;
按照这个需要,删除后要再建立一个空的dir文件夹。
不错不错~ 学习了
 
del c:/dir/*.* 应该可以!
 
To jrq:
del c:/dir/. 就等于 del c:/dir/*.*
/y 参数是省掉删除确认,>nul是省掉执行的结果显示。
 
刚刚想起 del c:/dir/*.* 试试去~

=====================
to 叮叮当当:》del c:/dir/. /y >nul
这句什么意思? 能解释一下吗?
我试了一下,好像不行!

继续听课!
 
to sinpo、叮叮当当:
在delhi6 中试过了
Writeln(f,'del C:/dir/*.*');
不行的!

你们试了吗?
 
uses Windows, Classes, ShellAPI;

const
FOF_DEFAULT_IDEAL = FOF_MULTIDESTFILES + FOF_RENAMEONCOLLISION + FOF_NOCONFIRMATION + FOF_ALLOWUNDO +
FOF_FILESONLY + FOF_NOCONFIRMMKDIR + FOF_NOERRORUI + FOF_SIMPLEPROGRESS;
FOF_DEFAULT_DELTREE = FOF_NOCONFIRMATION + FOF_ALLOWUNDO + FOF_NOERRORUI;
FOF_DEFAULT_COPY = FOF_NOCONFIRMATION + FOF_ALLOWUNDO + FOF_NOCONFIRMMKDIR + FOF_NOERRORUI + FOF_MULTIDESTFILES;
FOF_DEFAULT_DELFILES = FOF_DEFAULT_DELTREE;

function ShellDeleteFiles( hWnd : THandle ; const DirName : string; Flags : FILEOP_FLAGS; WinTitle : PChar ) : integer;
{---------------------------------------------------------------------------------------------}
{Apaga arquivos/Diretorios atraves do shell do windows}
//Notas: Ver comentario sobre o uso de duplo #0 nos parametros de Origem e destino
var
FileOpShell : TSHFileOpStruct;
Oper : array[0..1024] of char;
begin
if WinTitle <> nil then begin
Flags:=Flags + FOF_SIMPLEPROGRESS;
end;
with FileOpShell do begin
wFunc:=FO_DELETE;
pFrom:=Oper;
pTo:=Oper; //pra garantir a rapadura!
fFlags:=Flags;
lpszProgressTitle:=WinTitle;
Wnd:=hWnd;
hNameMappings:=nil;
fAnyOperationsAborted:=False;
end;
StrPCopy( Oper, DirName );
StrCat(Oper, PChar( ExtractFileName( FindFirstChildFile( DirName )) ) );
Result:=0;
try
while Oper <> EmptyStr do begin
Result:=ShFileOperation( FileOpShell );
if FileOpShell.fAnyOperationsAborted then begin
Result:=ERROR_REQUEST_ABORTED;
break;
end else begin
if Result <> 0 then begin
Break;
end;
end;
StrPCopy(Oper, FindFirstChildFile( DirName ) );
end;
except
Result:=ERROR_EXCEPTION_IN_SERVICE;
end;
end;
 
最简单的办法 按住shift键删除
 
To: jrq,laohe

我刚才试了,前面的回答的确是有些问题,del命令没有/y参数的,呵呵。
下面贴出完整、正确的解决方案:
1)
建立一个killall.bat批处理文件,把它放在c盘根目录下。
内容只有一行:
del c:/dir/.<c:/y.txt
2)
再建立一个y.txt文本文件,也把它放在c盘根目录下。
内容为:
y
最后按个回车(一定要),这样y.txt实际上包含一个“y”字符和一个回车符。
3)
在Delphi里新建一个Application,在窗体上放置一个Button控件,然后为Button
的OnClick事件写如下代码:
Winexec('c:/killall.bat', SW_HIDE);
4)
运行程序,按一下Button1就把c:/dir里所有文件删除了(不包括隐藏文件)。
我本来还给del后面加了>nul屏蔽输出,其实不用的,因为调用时DOS窗口本身就是隐藏的。
呵呵。
 
再贴一次!!!注意flag的值!!!
uses shellapi
function DelTree(aDir:String):Boolean;
Var
FO:TSHFileOpStruct;
begin
result:=false;
With FO do Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(aDir);
pTo:=nil;
fFlags:=FOF_NOCONFIRMATION;//不用fof_allowedundo,这样就不会放回收站
hNameMappings:=nil;
lpszProgressTitle:=PChar('正在删除文件夹'+aDir);
fAnyOperationsAborted:=False;
End;
if SHFileOperation(FO)=0 then result:=true;

end;


例子:
procedure TForm1.Button1Click(Sender: TObject);
begin
deltree('d:/yy')
end;

已经没有放到回收站了啊!
 
这么多高手 我要好好学习!

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1031537
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1030434
 
雪鹰:
能不能直接删除,不要放到回收站

 
to laohe
可以!
只要flag不要包含FOF_ALLOWUNDO就行,我第二次重贴的(从这贴往上第3贴)就没放到回收站。
 
多人接受答案了。
 
后退
顶部