ParamStr
该函数的原型是:function paramstr(i: Integer): String;
对于任何的application,paramstr(0)都默认代表的是应用程序的绝对路径。假如你这个编译号的exe 文件在 d:\delphi下,名字叫做 project1.exe。那么 在该应用程序中paramstr(0)返回:d:\delphi\project1.exe。这个值是变的,exe程序在哪,这个值就变为哪儿。
那么有paramstr(0),就肯定有paramstr(1),paramstr(2)…了。它们的值又是什么了?我试了下取出的是空值,又不能赋值。
delphi帮助中说Returns a specified parameter from the command-line.从命令行中返回一个特别的参数。折腾了半天才搞清楚,就是在exe文件后面可以跟参数,paramstr 获取的就是exe文件后面跟参数。
如有可执行文件project1.exe 在运行(cmd命令行)中输入 e:\project1.exe 123 456 789。 那么paramstr(1)=’123′ paramstr(2)=’456′ paramstr(3)=’789′
用shellexecute的话可以在parameters参数位置输入值。不同的参数值之间用空格隔开。如
1 | shellexecute(application . Handle,’open’,’project4 . exe’,’ 123 456 ′, ‘e:\’,SW_SHOW); |
所以用paramstr可以在应用程序间进行数据传输。
ExtractFilePath
功能:返回完整文件名中的路径。 具体使用的方法参见例子:
1 2 | Extractfilepath(‘d:\delphi\project1 . exe’) ; // 就等于 ‘d:\delphi\’ ,它就是把最后的文件名去掉,只要路径,且路径最后有 \ |
函数原型如下: function ExtractFilePath(const FileName: string): string;
ExtractFilePath和相近函数:
ExtractFileDrive :返回完整文件名中的驱动器,如”C:”
ExtractFilePath:返回完整文件名中的路径,最后带“/”,如”C:\test\”
ExtractFileDir:返回完整文件名中的路径,最后不带“/” ,如”C:\test”
ExtractFileName:返回完整文件名中的文件名称 (带扩展名),如”mytest.doc”
ExtractFileExt: 返回完整文件名中的文件扩展名(带.),如”.doc”
上面这么多,就是取得当前可执行文件的当前路径,这里就有一个应用的示例:
1 | myini := TIniFile . Create(ExtractFilePath(ParamStr( 0 ))+’Config . ini’); |
config.ini 和你的可执行文件是在同一级目录下的,,这样就找到config.ini文件了.
再介绍更多常用的文件操作函数
FileExists:判断文件是否存在
DirectoryExists:判断文件夹是不是存在
DeleteFile、Windows.DeleteFile:删除文件
RemoveDir、RemoveDirectory:删除文件夹
GetCurrentDir:获取当前文件夹
SetCurrentDir、ChDir、SetCurrentDirectory:设置当前文件夹
GetDir:获取指定驱动器的当前路径名
RenameFile:文件重命名
CreateDir、CreateDirectory、ForceDirectories:建立文件夹
RemoveDir、RemoveDirectory:删除空文件夹
FileCreate:建立新文件
GetFileVersion:获取当前文件的版本号
DiskSize、DiskFree:获取磁盘空间
FindFirst、FindNext、FindClose:搜索文件
FileGetAttr、FileSetAttr:读取与设置文件属性
FileAge、FileDateToDateTime:获取文件的创建时间
以上函数的代码示例
FileExists:判断文件是否存在
1 2 3 4 5 6 7 8 9 | var f: String ; begin f:= 'c:/temp/test.txt' ; if not FileExist(f) then begin //如果文件不存在 end ; end ; |
DirectoryExists:判断文件夹(路径)是否存在
1 2 3 4 5 6 7 8 9 | var dir: String ; begin dir:= 'c:/temp' ; if not DirectoryExists(dir) then begin //如果文件夹不存在 end ; end ; |
DeleteFile、Windows.DeleteFile:删除文件
1 2 3 4 5 6 7 8 9 10 | var f: String ; begin f:= 'c:/temp/test.txt' ; //DeleteFile(f); //返回Boolean //或者使用系统API,也返回Boolean Windows . DeleteFile( PChar (f)); //注意这里需要对String类型进行类型转换,转换为PChar,我的理解是Windows的API需要兼容C和Delphi,所以使用Char数组类型的字符串正好可以同时满足两种语言的结构 end ; |
RemoveDir、RemoveDirectory:删除文件夹
1 2 3 4 5 6 7 8 9 | var dir: String ; begin dir:= 'c:/temp' ; RemoveDir(dir); //返回Boolean //或者使用系统API //RemoveDirectory(PChar(dir)); //返回Boolean end ; |
GetCurrentDir:获取当前文件夹
1 2 3 4 5 6 | var dir: String ; begin dir:= GetCurrentDir; // C:/Projects ShowMessage(dir); end ; |
SetCurrentDir、ChDir、SetCurrentDirectory:设置当前文件夹
1 2 3 4 5 6 7 8 9 10 | var dir: String ; begin dir:= 'c:/temp' ; if SetCurrentDir(dir) then ShowMessage(GetCurrentDir); // c:/temp //或者使用 ChDir(dir); 这个函数无返回值 //也可以使用系统API:SetCurrentDirectory(PChar(dir)); 返回Boolean end ; |
GetDir:获取指定驱动器的当前路径名
1 2 3 4 5 6 7 8 9 10 | var dir: String ; b: Byte ; begin b:= 0 ; getDir(b, dir); ShowMessage(dir); //第一个参数:1、2、3、4……分别对应:A、B、C、D…… //0是缺省驱动器 end ; |
RenameFile:文件改名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //文件改名 RenameFile var OldName,NewName: string ; begin OldName := 'c:/temp/Old.txt' ; NewName := 'c:/temp/New.txt' ; if RenameFile(OldName,NewName) then ShowMessage( '改名成功!' ); //也可以: SetCurrentDir( 'c:/temp' ); //所以可以看出来,SetCurrentDir是切换目录路径(上面所说的设置路径就是指切换目录路径) OldName := 'Old.txt' ; NewName := 'New.txt' ; if RenameFile(OldName,NewName) then ShowMessage( '改名成功!' ); end ; |
CreateDir; CreateDirectory; ForceDirectories: 建立文件夹
1 2 3 4 5 6 7 8 9 10 11 12 13 | var dir: String ; begin dir:= 'c:/temp/delphi' ; if not DirectoryExists(dir) then CreateDir(dir); //返回Boolean //也可以直接使用系统API //CreateDirectory(PChar(dir), nil); //返回Boolean //如果缺少上层目录将自动补齐 dir:= 'c:/temp/CodeGear/Delphi/2007/万一' ; ForceDirectories(dir); //返回Boolean end ; |
RemoveDir、RemoveDirectory:删除空文件夹
1 2 3 4 5 6 7 8 9 | var dir: String ; begin dir:= 'c:/temp/delphi' ; RemoveDir(dir); //返回Boolean //也可以使用系统API //RemoveDirectory(PChar(dir)); //返回Boolean end ; |
FileCreate:建立新文件
1 2 3 4 5 6 7 8 9 10 11 12 13 | var FileName: string ; i: Integer ; begin FileName := 'c:/temp/test.dat' ; i := FileCreate(FileName); //FileCreate返回的是创建的文件的句柄,大于0成功,否则失败 if i> 0 then ShowMessage( '新文件的句柄是: ' + IntToStr(i)) else ShowMessage( '创建失败!' ); end ; |
GetFileVersion:获取当前文件的版本号
1 2 3 4 5 6 7 8 9 | var s: String ; i: Integer ; begin s:= 'C:/WINDOWS/notepad.exe' ; i:= GetFileVersion(s); //如果没有版本号就返回-1 ShowMessage(IntToStr(i)); //327681 这是当前记事本的版本号(还应该再转换一下) end ; |
DiskSize、DiskFree:获取磁盘空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var r: Real ; s: String ; begin r:= DiskSize( 3 ); //获取C:(序号是3)的总空间,单位是字节 r:= r/ 1024 / 1024 / 1204 ; Str(r: 0 : 2 , s); //格式为保留两位小数的字符串 s:= 'C盘的总空间是:' + s + ' GB' ; ShowMessage(s); //xx.xx GB r:= DiskFree(s); //获取C: 盘的可用空间 r:= r/ 1024 / 1024 / 1024 ; Str(r: 0 : 2 , s); s:= 'C盘的可用空间是:' + s + ' GB' ; ShowMessage(s); //xx.xx GB end ; |
FileSearch:查找一个文件
1 2 3 4 5 6 7 8 9 10 11 12 | var FileNAme, Dir, s: String ; begin FileName:= 'notepad.exe' ; Dir:= 'c:/windows' ; s:= FileSearch(FileName, Dir); if s <> '' then ShowMessage(s) // c:/windows/notepad.exe else ShowMessage( '没找到' ); end ; |
FindFirst、FindNext、FindClose:搜索文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | var sr: TSearchRec; //定义 TSearchRec 结构变量 Attr: Integer ; //文件属性 s: string ; //要搜索的内容 List: TStringList; //存放搜索结果 begin s := 'c:/windows/*.txt' ; Attr := faAnyFile; //文件属性值faAnyFile表示是所有文件 List := TStringList . Create; //List建立 if FindFirst(s,Attr,sr)= 0 then //开始搜索,并给 sr 赋予信息, 返回0表示找到第一个 begin repeat //如果有第一个就继续找 List . Add(sr . Name); //用List记下结果 until (FindNext(sr)<> 0 ); //因为sr已经有了搜索信息, FindNext只要这一个参数, 返回0表示找到 end ; FindClose(sr); //需要结束搜索, 搜索是内含句柄的 ShowMessage(List . Text); //显示搜索结果 List . Free; //释放List //更多注释: //TSearchRec 结构是内涵文件大小、名称、属性与时间等信息 //TSearchRec 中的属性是一个整数值, 可能的值有: //faReadOnly 1 只读文件 //faHidden 2 隐藏文件 //faSysFile 4 系统文件 //faVolumeID 8 卷标文件 //faDirectory 16 目录文件 //faArchive 32 归档文件 //faSymLink 64 链接文件 //faAnyFile 63 任意文件 //s 的值也可以使用?通配符,好像只支持7个?, 如果没有条件就是*, 譬如: C:/* //实际使用中还应该在 repeat 中提些条件, 譬如判断如果是文件夹就递归搜索等等 end ; |
FileGetAttr、FileSetAttr:读取与设置文件属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | var FileName: string ; Attr: Integer ; //属性值是一个整数 begin FileName := 'c:/temp/Test.txt' ; Attr := FileGetAttr(FileName); ShowMessage(IntToStr(Attr)); //32, 存档文件 //设置为隐藏和只读文件: Attr := FILE_ATTRIBUTE_READONLY or FILE_ATTRIBUTE_HIDDEN; if FileSetAttr(FileName,Attr)= 0 then //返回0表示成功 ShowMessage( '设置成功!' ); //属性可选值(有些用不着): //FILE_ATTRIBUTE_READONLY = 1; 只读 //FILE_ATTRIBUTE_HIDDEN = 2; 隐藏 //FILE_ATTRIBUTE_SYSTEM = 4; 系统 //FILE_ATTRIBUTE_DIRECTORY = 16 //FILE_ATTRIBUTE_ARCHIVE = 32; 存档 //FILE_ATTRIBUTE_DEVICE = 64 //FILE_ATTRIBUTE_NORMAL = 128; 一般 //FILE_ATTRIBUTE_TEMPORARY = 256 //FILE_ATTRIBUTE_SPARSE_FILE = 512 //FILE_ATTRIBUTE_REPARSE_POINT = 1204 //FILE_ATTRIBUTE_COMPRESSED = 2048; 压缩 //FILE_ATTRIBUTE_OFFLINE = 4096 //FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192; 不被索引 //FILE_ATTRIBUTE_ENCRYPTED = 16384 end ; |
FileAge、FileDateToDateTime:获取文件的创建时间
1 2 3 4 5 6 7 8 9 10 11 12 | var FileName: string ; ti: Integer ; dt: TDateTime; begin FileName := 'c:/temp/Test.txt' ; ti := FileAge(FileName); ShowMessage(IntToStr(ti)); //返回: 931951472, 需要转换 dt := FileDateToDateTime(ti); //转换 ShowMessage(DateTimeToStr(dt)); //2007-12-12 14:27:32 end ; |