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条)