Delphi删除文件夹

Delphi删除文件夹

2023年7月6日发(作者:)

1.既然是windows平台上, 就用shell API吧. 下面是一个例子:

PHP 代码:

uses ShellAPI;

function DeleteDirectory(const sDir : string) : Boolean;

var

SHFileOpStruct : TSHFileOpStruct;

FromBuf : Array [0..255] of Char;

ToBuf : Array [0..255] of Char;

begin

//make sure the target directory existing

if not DirectoryExists(sDir) then

begin

Result := False;

exit;

end;

//Initialize SHFileOpStruct.

Fillchar(SHFileOpStruct, Sizeof(SHFileOpStruct), 0);

FillChar(FromBuf, Sizeof(FromBuf), 0);

FillChar(ToBuf, Sizeof(ToBuf), 0);

StrPCopy(FromBuf, sDir);

StrPCopy(ToBuf, '');

//Delete directory and all its subdirectory as well as files.

//fill out the shell file operation struct.

With SHFileOpStruct Do

Begin

Wnd := 0;

wFunc := FO_DELETE;

pFrom := @FromBuf;

pTo := @ToBuf;

fFlags := FOF_ALLOWUNDO;

fFlags := FOF_NOCONFIRMATION or FOF_SILENT;

End;

//execute the operation and return result.

Result := (SHFileOperation(SHFileOpStruct) = 0);

end;

两点注意:

1. 要应用shellapi

2. SHFileOperation(...)可以执行copy, move, rename和delete命令. file或folder/directory对它而言都是一个file object, 没有区别. 具体参数控制可参见MSDN.

方法二

//删除指定的目录或文件

//Undo默认为false,即直接删除,不能undo,可以选择true,删除到回收站

function nDeleteDir(SrcDir: String;UndoMK:boolean=false):Boolean;

var

FS: TShFileOpStruct;

begin

:= ; //应用程序句柄

:= FO_DELETE; //表示删除

:= PChar(SrcDir+#0#0);

:= nil;

if UndoMK

then := FOF_NOCONFIRMATION + FOF_SILENT + FOF_ALLOWUNDO

// 表示删除到回收站

else := FOF_NOCONFIRMATION + FOF_SILENT;

// 表示不删除到回收站

ogressTitle := nil;

Result := (ShFileOperation(FS) = 0);

End;

方法三

在uses中加入ShellApi

自定义下过程

procedure dir(str:string);

Var

T:TSHFileOpStruct;

P:String;

begin

P:='c:update';//这里改成你要删除的任意目录名,P:=str str 是传过来的目录路径

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); eBox('删除成功!','系统提示',64);

end;

方法四:shellexecute(0, nil, 'rd', 'c:update /Q /S', '', 0);

方法五:

创建文件夹可以用ForceDirectories函数,可以创建深层文件夹;删除文件夹,可以用到下面的函数,参数为文件夹的路径,如:d:show

uses ShellAPI;

function DeleteDirectory(p :String): boolean;

var

f: TSHFILEOPSTRUCT;

begin

FillChar(f, SizeOf(f), 0);

with f do

begin

Wnd := 0;

wFunc := FO_DELETE;

pFrom := PChar(p+#0);

pTo := PChar(p+#0);

fFlags := FOF_ALLOWUNDO+FOF_NOCONFIRMATION+FOF_NOERRORUI;

end;

Result := (SHFileOperation(f) = 0);

end;

要简单一点的可以用Winexec调用dos的rd命令,如;winexec('cmd /c rd /s /q

d:show',sw_hide)就一句代码

遇到con文件夹可以先用winexec('cmd /c rd /s /q d:showcon',sw_hide)把con文件夹删除,再用winexec('cmd /c rd /s /q d:show',sw_hide)把show删除

until FindNext(sr) <> 0;

FindClose(sr);

end;

RemoveDir(sPath);

end;

判断文件夹存在不

if not DirectoryExists("D:APP1SetUp") then showmessage("存在") else

showmessage("不存在");

end;

if not Fileexists () then

begin

//如果文件不存在

end;

判断Ini文件存在

INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,

所以可视化的编程一族,如VB、VC、VFP、Delphi等都提供了读写INI文件

的方法,其中Delphi中操作INI文件,最为简洁,这是因为Delphi3提供了

一个TInifile类,使我们可以非常灵活的处理INI文件。

一、有必要了解INI文件的结构:

;注释

[小节名]

关键字=值

...

INI文件允许有多个小节,每个小节又允许有多个关键字,“=”后面是

该关键字的值。

值的类型有三种:字符串、整型数值和布尔值。其中字符串存贮在INI文

件中时没有引号,布尔真值用1表示,布尔假值用0表示。

注释以分号“;”开头。

二、定义

1、在Interface的Uses节增加IniFiles;

2、在Var变量定义部分增加一行:

myinifile:Tinifile;

然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了。

三、打开INI文件

myinifile:=('');

上面这一行语句将会为变量myinifile与具体的文件建立联

系,然后,就可以通过变量myinifile,来读写文件中的关 键字的值了。

值得注意的是,如果括号中的文件名没有指明路径的话,那么这个

文件会存储在Windows目录中,把文件存储在应

用程序当前目录中的方法是:为其指定完整的路径及文件名。下面的两

条语句可以完成这个功能:

Filename:=ExtractFilePath(Paramstr

(0))+'';

myinifile:=(filename);

四、读取关键字的值

针对INI文件支持的字符串、整型数值、布尔值三种数据类型,

TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。

假设已定义变量vs、vi、vb分别为string、integer、boolean类型。

vs:=ring

('小节名','关键字',缺省值);

vi:=teger

('小节名','关键字',缺省值);

vb:=ol

('小节名','关键字',缺省值);

其中缺省值为该INI文件不存在该关键字时返回的缺省值。

五、写入INI文件

同样的,TInifile类也提供了三种不同的对象方法,向INI文件写

入字符串、整型数及布尔类型的关键字。

tring('小节名','关键字',变量或字符串值);

nteger('小节名','关键字',变量或整型数值);

ool('小节名','关键字',变量或True或False);

当这个INI文件不存在时,上面的语句还会自动创建该INI文件。

六、删除关键字

除了可用写入方法增加一个关键字,Tinifile类还提供了一个删

除关键字的对象方法:

Key('小节名','关键字');

七、小节操作

增加一个小节可用写入的方法来完成,删除一个小节可用下面的

对象方法:

ection('小节名');

另外Tinifile类还提供了三种对象方法来对小节进行操作:

ction('小节名',TStrings变量);可将指定小节中的

所有关键字名读取至一个字符串列表变量中; ctions(TStrings变量);可将INI文件中所有小节名读

取至一个字符串列表变量中去。

ctionvalues('小节名',TStrings变量);可将INI文件

中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变

量中去。

八、释放

在适当的位置用下面的语句释放myinifile:

y;

九、一个实例

下面用一个简单的例子(如图),演示了建立、读取、存贮INI文件的方

法。文件中包含有“程序参数”小节,和用户名称(字符串

)、是否正式用户(布尔值)和已运行时间(整型值)三个关键字。

程序在窗体建立读取这些数据,并在窗体释放时写文件。

附源程序清单

unitUnit1;

interface

uses

Windows,Messages,SysUtils,Classes,Graphics,

Controls,Forms,Dialogs,inifiles,StdCtrls,ExtCtrls;

type

TForm1=class(TForm)

Edit1:TEdit;

CheckBox1:TCheckBox;

Edit2:TEdit;

Label1:TLabel;

Label2:TLabel;

Timer1:TTimer;

Label3:TLabel;

procedureFormCreate(Sender:TObject);

procedureFormDestroy(Sender:TObject);

procedureTimer1Timer(Sender:TObject);

private

{Privatedeclarations}

public

{Publicdeclarations}

end;

var Form1:TForm1;

implementation

var

myinifile:TInifile;

{$R*.DFM}

eate(Sender:TObject);

var

filename:string;

begin

filename:=ExtractFilePath(paramstr(0))+'';

myinifile:=(filename);

:=ring

('程序参数','用户名称','缺省的用户名称');

:=inttostr(teger

('程序参数','已运行时间',0));

d:=ol

('程序参数','是否正式用户',False);

end;

stroy(Sender:TObject);

begin

tring('程序参数','用户名称',);

nteger('程序参数','已运行时间',

strtoint());

ool('程序参数','是否正式用户',

d);

y;

end;

1Timer(Sender:TObject);

begin

:=inttostr(strtoint()+1);

end;

end.

程序在Pwin95、Delphi3下调试通过。

----------------------------------------------------------------------

演示程序如下:(注意:在 users 中必须包含 IniFiles)

procedure fo;

var

InfoFile:TIniFile; UserName,UserClass:string;

begin

//创建对象

InfoFile:=('c:');

//读字符,readstring(主键,键名,缺省值)

UserName:=ring('user','username','demo');

//写字符,writestring(主键,键名,键值)

tring('user','age','18');

//删除键,DeleteKey(主键,键名)

Key('class','userclass');

//删除主键,EraseSection(主键)

ection('class');

//释放对象

;

end;

--------------------------------------------------------

控制INI文件几种方法

在Windows中利用.INI文件做程序有关数据的存储工作是很常见的,其中涉及了读和写.INI文件问题,下面就介绍几种不同的方法给大家参考:

从.INI文件中获取字符串

var

strResult:pchar;

begin

GetPrivateProfileString(

'windows', // []中标题的名字

'NullPort', // =号前的名字

'NIL', // 如果没有找到字符串时,返回的默认值

strResult, //存放取得字符

100, //取得字符的允许最大长度

'c:' // 调用的文件名

);

:=strResult; //显示取得字符串

从.INI文件中获取整数

:=inttostr(GetPrivateProfileInt(

'intl', // []中标题的名字

'iCountry', // =号前的名字

0,// 如果没有找到整数时,返回的默认值 'c:' // 调用的文件名

));

向.INI文件写入字符串

WritePrivateProfileString(

'windows', // []中标题的名字

'load', // 要写入“=”号前的字符串

'accca', //要写入的数据

'c:' // 调用的文件名

);

向.INI文件写入整数

WritePrivateProfileSection(

'windows', // []中标题的名字

'read=100', // 要写入的数据

'c:' // 调用的文件名

);

上面的方法是调用API函数,下面介绍另一种不用API,而是使用TIniFile从.INI文件中获取字符的方法

从.INI文件中读字符

var MyIni: TIniFile;

begin

MyIni := ('');//调用的文件名

:=ring('Desktop', 'Wallpaper', '');//取得字符

end;

向.INI文件中写入字符

var MyIni: TIniFile;

begin

MyIni := ('');//调用的文件名

tring('Desktop', 'Wallpaper', 'c:');//写入字符

end;

下面的是本人自制的读INI文件函数,也提供给大家参考:

function GetINIfile(lpAppNameL,lpKeyName,lpDefault:string;

lpsize:integer;lpFileName:string):string;

{读取ini文件函数}

var f:textfile;

sn:string;

begin

assignfile(f,lpFileName);

reset(f);

repeat readln(f,sn);

if sn='['+lpAppNameL+']' then

begin

readln(f,sn);

while(copy(sn,1,1)<>'[')or(not(eof(f)))do

begin

if copy(sn,1,pos('=',sn)-1)=lpKeyName then

begin

GetINIfile:=copy(sn,pos('=',sn)+1,lpsize);

exit;

end;

readln(f,sn);

end;

end

else GetINIfile:=lpDefault;

until eof(f);

closefile(f);

end;

{------------}

调用方法是:

var Timeout:String;

begin

Timeout:=GetINIfile('MailSetup','Timeout','0',5,prgpath+'');

end;

-------------------------------------------------------------

FileExists函数 判断文件是否存在

FPath:=ExtractFielPath(Paramstr(0))+''

If Not FileExists('FPath') then

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688598420a153673.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信