Delphi 文件操作(路径、目录)
Delphi利用系统环境变量获取常用系统目录
//譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取:
- var
- s: string;
- begin
- s := GetEnvironmentVariable('WINDIR');
- ShowMessage(s); {C:\WINDOWS}
- end;
一些系统目录变量列表:
- --------变量-----------------------------,-------描述-------------------------------------------
- %WINDIR% {系统目录 - C:\WINDOWS}
- %SYSTEMROOT% {系统目录 - C:\WINDOWS}
- %SYSTEMDRIVE% {系统根目录 - C:}
- %HOMEDRIVE% {当前用户根目录 - C:}
- %USERPROFILE% {当前用户目录 - C:\Documents and Settings\wy}
- %HOMEPATH% {当前用户路径 - \Documents and Settings\wy}
- %TMP% {当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp}
- %TEMP% {当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp}
- %APPDATA% {当前用户数据文件夹 - C:\Documents and Settings\wy\Application Data}
- %PROGRAMFILES% {程序默认安装目录 - C:\Program Files}
- %COMMONPROGRAMFILES% {文件通用目录 - C:\Program Files\Common Files}
- %USERNAME% {当前用户名 - wy}
- %ALLUSERSPROFILE% {所有用户文件目录 - C:\Documents and Settings\All Users}
- %OS% {操作系统名 - Windows_NT}
- %COMPUTERNAME% {计算机名 - IBM-B63851E95C9}
- %NUMBER_OF_PROCESSORS% {处理器个数 - 1}
- %PROCESSOR_ARCHITECTURE% {处理器芯片架构 - x86}
- %PROCESSOR_LEVEL% {处理器型号 - 6}
- %PROCESSOR_REVISION% {处理器修订号 - 0905}
- %USERDOMAIN% {包含用户帐号的域 - IBM-B63851E95C9}
- %COMSPEC% {C:\WINDOWS\system32\cmd.exe}
- %PATHEXT% {执行文件类型 - .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.pyo;.pyc;.py;.pyw}
获取程序的路径
Delphi 在启动应用程序时与 C 语言一样会传递命令行参数给应用程序,第一个参数(索引号为零)表示应用程序本身的文件名(包括完整的路径),这个 String 参数由函数 ParamStr(0) 返回。
顺便说一句,Delphi 提供了分析文件名的多个函数,如果你需要从文件名中得到路径名,可用下面的两个函数,这两个函数有一点点微小的差别:
ExtractFilePath(FileName:String) 该函数返回路径名,其结尾字符总是“\”
ExtractFileDir(FileName:String) 该函数同样返回路径名,但不包括结尾的字符“\”,除非返回的路径是根目录。
例如:获取当前程序的路径时就应该这样写
- var
- patch:string;
- ………
- patch:=ExtractFilePath(ParamStr());
- 如果调用同一目录下的aa.ini文件,就应该这样写
- inifilename:string;
- inifilename:=patch+'aa.ini';
获取临时文件夹路径
- //声明:
- GetTempPath(
- nBufferLength: DWORD; {缓冲区大小}
- lpBuffer: PChar {缓冲区}
- ): DWORD; {返回实际长度}
- //举例:
- var
- arr: array[..MAX_PATH] of Char;
- num: DWORD;
- begin
- num := GetTempPath(MAX_PATH, arr);
- ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\}
- ShowMessage(IntToStr(num)); {}
- end;
获取系统特殊文件夹
我们在编写程序的时候,经常会需要得到系统中的一些特殊目录,例如:桌面、收藏夹、历史文件、字体等。在windows98、windows NT、Windows 2000中他们的位置是不一样的,尤其在windows2000和wodows NT中,他们的位置随着登陆用户的不同而改变。那么我们要如何取得这些特殊目录的具体位置呢?
当然是利用Api函数,现在我介绍两个Api函数,利用他们就可以轻松简单的获取这些特殊系统目录。
Function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer;
var ppidl: PItemIDList): HResult; stdcall;
Function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL;stdcall;
其中由nFolder参数指定的就是各个特殊系统目录:
CSIDL_DESKTOP:毫无疑问这就是桌面;
CSIDL_DRIVERS:我的电脑;
CSIDL_FAVORITES:收藏夹;
CSIDL_STARTUP:开始菜单;
CSIDL_NETWORK:网上邻居;
还有很多,你可以查阅一下Delphi的Win32 Api函数的帮助文件,不过在帮助文件下的这些参数也不是很全,像收藏夹帮助文件里面就没有,你可以查阅一下它的头文件:shlobj.pas。
下面我就利用这两个函数取得桌面的路径(在win98和win2000下都可以使用):
- uses shlobj;
- var
- pitem:PITEMIDLIST;
- s:string;
- begin
- shGetSpecialFolderLocation(handle,CSIDL_DESKTOP,pitem);
- setlength(s,);
- shGetPathFromIDList(pitem,pchar(s));
- end;
在字符串s中存储的就是桌面的路径值。简单吧!就是这么简单,但要是你不知道,你就得绕一个大圈子。
获取文件所在路径
- //delphi 获取文件所在路径
- ExtractFileDrive :返回完整文件名中的驱动器,如"C:"
- ExtractFilePath:返回完整文件名中的路径,最后带“/”,如"C:/test/"
- ExtractFileDir:返回完整文件名中的路径,最后不带“/” ,如"C:/test"
- ExtractFileName:返回完整文件名中的文件名称 (带扩展名),如"mytest.doc"
- ExtractFileExt 返回完整文件名中的文件扩展名(带.),如".doc"
- ExtractRelativePath : 返回相对路径,定义如下:
- function ExtractRelativePath(const BaseName, DestName: string): string;
- 使用测试下如:
- SysUtils.ExtractRelativePath('C:/test','C:/Test/TestRelativePath'):返回TestRelativePath
- SysUtils.ExtractRelativePath('C:/Test/TestRelativePath','C:/test'):返回'../TestRelativePath'
- SysUtils.ExtractRelativePath('C:/Test/TestRelativePath/','C:/test'):返回'../../TestRelativePath'
- ExtractShortPathName :返回短文件名,即8+,文件名长八位,扩展名为3号,为保持DOS系统兼容而存在
- 若想获取的文件名不带路径,可用:
- ChangeFileExt(TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename,''); 函数将扩展名改掉即可.目前好象就这一种办法,谁还有更好的办法?请告知
- 另附其它地方的资料:
- 、文件名函数
- 文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。下表列出这些函数及其功能。
- 函数 说明
- ExpandFileName() 返回文件的全路径(含驱动器、路径)
- ExtractFileExt() 从文件名中抽取扩展名
- ExtractFileName() 从文件名中抽取不含路径的文件名
- ExtractFilePath() 从文件名中抽取路径名
- ExtractFileDir() 从文件名中抽取目录名
- ExtractFileDrive() 从文件名中抽取驱动器名
- ChangeFileExt() 改变文件的扩展名
- ExpandUNCFileName() 返回含有网络驱动器的文件全路径
- ExtractRelativePath() 从文件名中抽取相对路径信息
- ExtractShortPathName() 把文件名转化为DOS的8·格式
- MatchesMask() 检查文件是否与指定的文件名格式匹配
- ExtractFilePath(FileName:String)
- 该函数返回路径名,其结尾字符总是“/”
- ExtractFileDir(FileName:String)
- 该函数同样返回路径名,但不包括结尾的字符“/”,除非返回的路径是根目录。
- 下面就把这些函数作一一介绍:
- ⑴ExpandFileName()
- 原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName);
- 功能:返回文件的全路径(含驱动器、路径)
- 参数:FileName:要处理的文件名
- 例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:/MyBCB/Sample1.EXE
- ⑵ExtractFileExt()
- 原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName);
- 功能:从文件名中抽取扩展名
- 参数:FileName:要处理的文件名(全路径)
- 例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe"
- ⑶ExtractFileName()
- 原型:extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName);
- 功能:从文件名中抽取不含路径的文件名
- 参数:FileName:要处理的文件名
- 例:ShowMessage(ExtractFileExt("c://Winnt//SOL.EXE"));//显示"SOL.EXE"
- ⑷ExtractFilePath()
- 原型:extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);
- 功能:从文件名中抽取路径名
- 参数:FileName:要处理的文件名
- 例:ShowMessage(ExtractFilePath("Winnt//SOL.EXE"));//显示"Winnt/"
- ⑸ExtractFileDir()
- 原型:extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);
- 功能:从文件名中抽取目录名(和上个函数不同,不包括最后的"/")
- 参数:FileName:要处理的文件名
- 例:ShowMessage(ExtractFileDir("Winnt//SOL.EXE"));//显示"Winnt",注意和上个函数的区别
- ⑹ExtractFileDrive()
- 原型:extern PACKAGE AnsiString __fastcall ExtractFileDrive(const AnsiString FileName);
- 功能:从文件名中抽取驱动器名
- 参数:FileName:要处理的文件名
- 例:ShowMessage(ExtractFileDrive("c://Winnt//SOL.EXE"));//显示"c:"
- ⑺ChangeFileExt()
- 原型:extern PACKAGE System::AnsiString __fastcall ChangeFileExt(const System::AnsiString FileName, const System::AnsiString Extension);
- 功能:更改文件名的扩展名,不是对真正的文件进行改名,只是对文件名这个字符串进行处理
- 参数:FileName:要改名的文件名,Extension:新的扩展名
- 例:ShowMessage(ChangeFileExt("c://Winnt//SOL.EXE",".OOO"));//显示"c:/winnt/SOL.OOO"
- ⑻ExpandUNCFileName()
- 原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName);
- 功能:返回含有网络驱动器的文件全路径,格式为://机器名/共享名/文件名
- 参数:FileName:要处理的文件名
- 例:ShowMessage(ExpandUNCFileName("F://Winnt//SOL.EXE"));/*如果F:是映射的网络驱动器,则显示"
- ⑼ExtractRelativePath()
- 原型:extern PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BaseName, const AnsiString DestName);
- 功能:从文件名中抽取相对路径信息,如"../sss/ss.asd"这种形式
- 参数:BaseName:基准文件名;DestName:目标文件名
- 例:ShowMessage(ExtractRelativePath("D://Source//c//1.123","D://Source//Asm//dz.asm"));/*显示"../asm/dz.asm"*/
- ⑽ExtractShortPathName()
- 原型:extern PACKAGE AnsiString __fastcall ExtractShortPathName(const AnsiString FileName);
- 功能:把文件名转换为DOS的8、格式
- 参数:FileName:要处理的文件名
- 例:ShowMessage(ExtractShortPathName("E://Program Files//Dual Wheel Mouse//4dmain.exe"));/*显示"E:/Progra~1/dualwh~1/4dmain.exe"*/
- ⑾MatchesMask()
- 原型:extern PACKAGE bool __fastcall MatchesMask(const AnsiString Filename, const AnsiString Mask);
- 功能:检查文件是否与指定的文件名格式匹配
- 参数:FileName:要处理的文件名;Mask:文件名格式,支持通配符
- 例:ShowMessage(MatchesMask("Lxf.exe","*.?x?));//显示"true"
返回临时文件夹文件路径
- function GetExePath: string;
- begin
- Result := ExtractFilePath(ParamStr());
- end;
- function GetTempFileName: string;
- var
- vPath: string;
- begin
- SetLength(Result, );
- GetTempFileName(PChar(GetExePath), PChar('~'), , PChar(result));
- vPath := GetExePath + 'temp\';
- if not SysUtils.DirectoryExists(vPath) then
- SysUtils.ForceDirectories(vPath);
- result := PChar(Result); //去掉多余的空字符
- Result := vPath + ExtractFileName(Result);
- end;
文件路径问题
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- LabeledEdit1: TLabeledEdit;
- LabeledEdit2: TLabeledEdit;
- OpenDialog1: TOpenDialog;
- Button3: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- if OpenDialog1.Execute() then
- begin
- LabeledEdit1.Text:= OpenDialog1.FileName;
- end;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- if OpenDialog1.Execute() then
- begin
- LabeledEdit2.Text:= OpenDialog1.FileName;
- end;
- end;
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- //RenameFile('Oldname', 'Newname');
- MoveFile(PChar(LabeledEdit1.Text), PChar(LabeledEdit2.Text));
- end;
- function ReFileName(filepath: string): string;
- begin
- result := ChangeFileExt(ExtractFileName(filepath), '');
- {
- Edit4.Text:=paramstr(0);//C:\FILE\Project1.exe
- Edit2.Text:=ExtractFilePath(Application.ExeName);//C:\FILE\
- Edit1.Text:=ExtractFileName(Application.ExeName);//Project1.exe
- Edit3.Text:=ExtractFileExt(Application.ExeName);//.exe
- }
- end;
- if FileExists(extractFilePath(application.exeName)+'newFile\123.txt')
- then
- label2.Caption :='创建成功'
- else
- label2.Caption :='创建失败';
- end;
- end.
文件路径相关的字符串操作
- //delphi文件路径相关的字符串操作
- uses
- HTTPApp, Masks;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- ss,s: string;
- begin
- //先提取一个文件名的字符串
- ss := Application.ExeName;
- ShowMessage(ss); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe
- //路径
- s := ExtractFilePath(ss);
- ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\
- //所在文件夹
- s := ExtractFileDir(ss);
- ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects
- //所在逻辑盘
- s := ExtractFileDrive(ss);
- ShowMessage(s); //C:
- //文件名
- s := ExtractFileName(ss);
- ShowMessage(s); //Project1.exe
- //文件扩展名
- s := ExtractFileExt(ss);
- ShowMessage(s); //.exe
- //相对路径
- s := ExtractRelativePath('C:\Documents and Settings\wy\My Documents\',ss);
- ShowMessage(s); //RAD Studio\Projects\Project1.exe
- //dos下的短文件名
- s := ExtractShortPathName(ss);
- ShowMessage(s); //C:\DOCUME~1\wy\MYDOCU~1\RADSTU~1\Projects\Project1.exe
- //转换到Unix路径格式, 需要 uses HTTPApp
- s := DosPathToUnixPath(ss);
- ShowMessage(s); //C:/Documents and Settings/wy/My Documents/RAD Studio/Projects/Project1.exe
- //转Unix路径格式为Window格式, 是 DosPathToUnixPath 的逆操作
- s := ExpandUNCFileName(DosPathToUnixPath(ss));
- ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe
- //去掉结尾的路径分隔符
- s := ExcludeTrailingPathDelimiter(ExtractFilePath(ss));
- ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects
- //去掉结尾的路径分隔符, 只是调用:ExcludeTrailingPathDelimiter
- s := ExcludeTrailingBackslash(ExtractFilePath(ss));
- ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects
- //更换扩展名, 并不修改文件, 只是替换字符串:
- s := ChangeFileExt(ss,'.bak');
- ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.bak
- //更换文件路径:
- s := ChangeFilePath(ss,'c:\temp');
- ShowMessage(s); //c:\temp\Project1.exe
- //判断第几个字符是否是路径分隔符:
- IsPathDelimiter(ss,); //返回 True
- //判断后缀名是不是 exe; 需要 uses Masks
- MatchesMask(ss,'*.exe'); //返回 True
- end;
- --------------------------------------------------------------------------------
- //分解 ProcessPath (需要 uses FileCtrl)
- var
- s,p,f: string;
- d: Char;
- begin
- s := ParamStr();
- ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe
- ProcessPath(s,d,p,f);
- ShowMessage(d); //C
- ShowMessage(p); //\Documents and Settings\wy\My Documents\RAD Studio\Projects
- ShowMessage(f); //Project1.exe
- end;
- --------------------------------------------------------------------------------
- //压缩显示 MinimizeName (需要 uses FileCtrl)
- var
- s: string;
- begin
- s := ParamStr();
- s := MinimizeName(s,Self.Canvas,);
- ShowMessage(s); //C:\...\Project1.exe
- end;
搜索文件夹和文件
- function FindFile(Path: string): string; {搜索文件夹和文件}
- var
- Sr: TSearchRec;
- CommaList: TStringList;
- s: string;
- dt: TDateTime;
- begin
- commalist := Tstringlist.Create;
- try
- Findfirst(path + '*.*', faAnyFile, sr);
- if ((Sr.Attr and faDirectory) > ) and (Sr.Name <> '.') then
- begin
- dt := FileDateToDateTime(sr.Time);
- s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
- commalist.add('*' + s + sr.name);
- end;
- while findnext(sr) = do
- begin
- if ((Sr.Attr and faDirectory) > ) and (Sr.Name <> '..') then
- begin
- dt := FileDateToDateTime(sr.Time);
- s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
- commalist.add('*' + s + sr.name);
- end;
- end;
- FindClose(sr);
- FindFirst(path + '*.txt', faArchive + faReadOnly + faHidden + faSysFile, Sr);
- if Sr.Attr <> faDirectory then
- begin
- dt := FileDateToDateTime(sr.Time);
- s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
- commalist.add('\' + s+ Format('%.0n', [sr.Size / ]) + '|' + sr.name);
- end; //Inttostr(
- while findnext(sr) = do
- begin
- if (sr.Attr <> faDirectory) then
- begin
- dt := FileDateToDateTime(sr.Time);
- s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
- commalist.add('\' + s +Format('%.0n', [sr.Size / ]) + '|' + sr.name);
- end;
- end;
- FindClose(Sr);
- except
- end;
- Result := commalist.Text; //Result是消息的 定义
- commalist.Free;
- end;
搜索指文件,幷获取该文件的完整路径
- procedure TForm1.GetDirFileNameList(sDirPath, sExt: string);
- var
- sr: TSearchRec;
- function StrInFileName(s1, sName: string): Boolean;
- var
- str1, str2: string;
- begin
- Result := False;
- str1 := UpperCase(sName);
- str2 := UpperCase(Copy(s1, , Pos('.', s1)-));
- if Pos(str2, str1) > then Result := True;
- end;
- begin
- if DirectoryExists(sDirPath) then
- begin
- if FindFirst(sDirPath + '\*.*', faAnyFile, sr) = then
- begin
- if (sr.Name <> '.') and (sr.Name <> '..') and StrInFileName(sExt, sr.Name) then
- Memo1.Lines.Add(sDirPath + '\' + sr.Name);
- while (FindNext(sr) = ) do
- begin
- if (sr.Name <> '.') and (sr.Name <> '..') and StrInFileName(sExt, sr.Name) then
- Memo1.Lines.Add(sDirPath + '\' + sr.Name);
- end;
- end;
- FindClose(sr);
- end;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- GetDirFileNameList('E:\king', '123.exe');
- end;
软件实现双击打开文件
- unit shjAssociateFileType;
- interface
- uses Windows, Registry;
- {将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明}
- function AssignToProgram(const strFileExtension, strDiscription, strExeFileName: string ): boolean;
- implementation
- {将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明}
- function AssignToProgram(const strFileExtension, strDiscription, strExeFileName: string ): boolean;
- var
- regFile: TRegistry;
- begin
- //建立一个Registry实例
- regFile := TRegistry.Create;
- with regFile do
- begin
- //设置根键值为HKEY_CLASSES_ROOT
- RootKey := HKEY_CLASSES_ROOT;
- //创建或者打开扩展名自动关联注册键
- OpenKey( '.' + strFileExtension, true);
- //设置扩展名自动关联
- WriteString('', strFileExtension + '_Auto_File');
- //关闭键
- CloseKey;
- //创建或者打开打开自动关联键
- OpenKey(strFileExtension + '_Auto_File', true);
- //设置文件类型说明
- WriteString('', strDiscription);
- //关闭键
- CloseKey;
- //创建或打开关联程序键
- OpenKey(strFileExtension + '_Auto_File\shell\open\command', true);
- //设置关联程序(注意:%1加上双引号,可以解决文件路径中含空格的问题)
- WriteString('',strExeFileName + ' "%1"');
- //关闭键
- CloseKey;
- //打开默认图标键
- OpenKey(strFileExtension + '_Auto_File\defaulticon',true);
- //关联默认图标
- WriteString('', strExeFileName + ',0');
- //释放
- Free;
- Result := True;
- end;
- end;
- end.
软件实现拖拽打开文件
- //声明
- protected
- procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;
- ------------------------------------------------------------------------------------------------------------------------
- //实现
- procedure TFormMain.WMDROPFILES(var Msg: TMessage);
- var
- i, n: Integer;
- Buffer: Array[..] of Char;
- begin
- //得到拖拽文件数量
- n := DragQueryFile(Msg.wParam, $FFFFFFFF, Buffer, );
- //处理选择多个文件
- for i := to n - do
- begin
- //获取拖拽文件名
- DragQueryFile(Msg.wParam, i, Buffer, );
- //文件名就在Buffer里面了
- if UpperCase(ExtractFileExt(Buffer)) = '.BZLX' then
- begin
- //判断文件是否已经打开
- if UpperCase(Buffer) = UpperCase('test.bzlx') then
- begin
- MessageDlg('文件test.bzlx已经打开!', (mtInformation),[mbOK],);
- exit;
- end;
- //打开文件
- OpenFile(Buffer);
- exit;
- end;
- end;
- //结束拖拽
- DragFinish(Msg.wParam);
- end;
- ------------------------------------------------------------------------------------------------------------------------
- //初始化
- procedure TFormMain.FormCreate(Sender: TObject);
- begin
- //使窗口句柄可以接收拖拽操作
- DragAcceptFiles(Handle, True);
- end;
文件拖拽获取路径
支持单文件
1. 添加单元 shellAPI
2. 在过程里 procedure TForm1.FormCreate(Sender: TObject);
加入此函数DragAcceptFiles(Form1.Handle,true); //注册拖放文件
3. 在 public 里声明
procedure TFfile(var Msg:TMessage);message WM_DROPFILES;
4.函数实现
- procedure TForm1.TFfile(var Msg:TMessage);
- var
- buffer:array[..] of Char;
- begin
- inherited;
- buffer[]:=#;
- DragQueryFile(Msg.WParam,,buffer,sizeof(buffer)); //获取拖入文件名称
- label1.Caption:=PChar(@buffer); //字符数组转换成字符串
- end;
支持多文件
首先先建立工程然后添加一个memo控件,用来存放路径。
拖拽文件需要用到shellAPI所以,在单元里面需要添加shellAPI
好了我们来看实现过程
1. 添加单元 shellAPI
2. 在过程里 procedure TForm1.FormCreate(Sender: TObject);
加入此函数DragAcceptFiles(Form1.Handle,true); //注册拖放文件
3. 在 public 里声明
procedure TFfile(var Msg:TMessage);message WM_DROPFILES;
4.函数实现
- procedure TForm1.TFfile(var Msg:TMessage);
- var
- FilesCount: Integer;// 文件总数
- i: Integer;
- buffer:array[..] of Char;
- begin
- inherited;
- try
- buffer[]:=#;
- FilesCount:=DragQueryFile(Msg.WParam, $FFFFFFFF,nil,); //获取文件个数
- Memo1.Lines.Add('文件总数为:'+IntToStr(FilesCount));
- // 获取文件名
- for i:= to FilesCount- do
- begin
- DragQueryFile(Msg.WParam, i, buffer,); //获取拖拽文件路径
- Memo1.Lines.Add(buffer);
- end;
- finally
- DragFinish(Msg.WParam);
- end;
- end;
在DELPHI中如何得到一个文件名不带扩展名
- Edit4.Text:=paramstr();//C:\FILE\Project1.exe
- Edit2.Text:=ExtractFilePath(Application.ExeName);//C:\FILE\
- Edit1.Text:=ExtractFileName(Application.ExeName);//Project1.exe
- //project
- Edit3.Text:=ExtractFileExt(Application.ExeName);//.exe
- Edit1.Text:=ChangeFileExt(ExtractFileName(Application.ExeName),'') ; //获取到应用程序名后,将后缀名清空就可以啦。
生成临时文件
- //举例:
- var
- arr,f: array[..MAX_PATH] of Char;
- num: DWORD;
- begin
- num := GetTempPath(MAX_PATH, arr);
- ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\}
- GetTempFileName(arr,'-My',,f){C:\DOCUME~1\wy\LOCALS~1\Temp\-my10.temp}
- ShowMessage(IntToStr(num));
- ShowMessage(IntToStr(num)); {}
- end;
Delphi 文件操作(路径、目录)的更多相关文章
- Linux基础(10)AIO项目设计与POSIX文件操作和目录管理
实现fast-cp :拷贝文件到目标对象 Linux的七种文件类型 :https://blog.csdn.net/linkvivi/article/details/79834143 ls -al :h ...
- delphi文件操作(比较全)
Delphi中默认有input和output两个文件变量,使用可以不用定义,直接使用. 但: input:只读.output:只写.用时注意以免引起异常. 文件是由文件名标识的一组数据的集合,文件通常 ...
- delphi 文件操作(信息获取)
delphi获取Exe文件版本信息的函数 Type TFileVersionInfo = Record FixedInfo:TVSFixedFileInfo; {版本信息} CompanyName:S ...
- Delphi文件操作函数
文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道.文件的本质是一个数据流,所有的文件实际上是一串二进制序列.文件管理包括:1.文件操作.2.目录操作.3.驱动器操作.三部分. 1.常见文 ...
- [C/C++][文件操作] 对比目录并列出同名较新文件、较旧文件 0.1
主要是模仿robocopy的部分功能 (robocopy /L 参数可以列出本地目录和备份目录中的异同之处,主要是标记出:较新的.较旧的.多出的文件 ) 现在还不会写GUI,打算后面自己做目录树dif ...
- (转) unity 在移动平台中,文件操作路径详解
http://www.unitymanual.com/thread-23491-1-1.html 今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够 ...
- Unity文件操作路径
Unity3D中的资源路径: Application.dataPath:此属性用于返回程序的数据文件所在文件夹的路径.例如在Editor中就是Assets了. Application.streamin ...
- delphi文件操作的总结
csfinal90我的:收件箱资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 windzb的专栏 目录视图 摘要视图 订阅 IT俱乐部创始人杜鸿飞专访 ...
- unity 在移动平台中,文件操作路径详解
今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够更好.更快的掌握,当然,如有不足的地方 欢迎指正!!! 相信大家在开发过程中,难免会保存一些文件在 ...
随机推荐
- shell cut从一个文件中提取列
cut 语法 cut -d 分隔符 -f 列索引 file.txt #将文件file.txt以分隔符.进行分割,并取出第2列.cut -d '.' -f 3- file.txt #将文件file.tx ...
- linux su su-的区别
su只是切换用户. su - 切换用户并切换shell环境. su another pwd后为/home/current su - another pwd后为/home/another
- Python--前端之HTML
html概述和基本结构 HTML概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言 ...
- 工厂方法配置bean
1:静态工厂方法配置bean 1):对象 package com.spring.helloworld; public class Car { private String name; private ...
- CSS分组和嵌套选择器
CSS 分组 和 嵌套 选择器 分组选择器 在样式表中有很多具有相同样式的元素.直线模组哪家好 h1 { color:green; } h2 { color:green; } p { ...
- SPOJ LEXSTR 并查集
题目描述: Taplu and Abhishar loved playing scrabble. One day they thought of inventing a new game using ...
- 【dart学习】-- Dart之网络请求操作
Flutter的请求网络有多种方式,一种是使用dart io中的HttpClient发起的请求,一种是使用dio库,另一种是使用http库,先学一下get和post,put.delete就等后面用到在 ...
- Django中object.all是什么东西
前言 先抛出一个问题.银行就相当于一个数据库,你去银行取钱存钱办卡销卡,是你告诉银行柜员方便还是你自己去操作电脑办卡取卡方便?(你还不一定会,假设自动存款机还没发明),object在数据库中就相当于银 ...
- python进阶:类和对象
@修饰符:将被修饰的函数作为参数,运行修饰函数 实例方法: 静态方法:@staticmethod 类方法:@classmethod 自省:通过一定的机制查询到对象的内部结构 序列类: 列表推导式(例表 ...
- JQ-jQuery-Ajax:jQuery Ajax 操作函数
ylbtech-JQ-jQuery-Ajax:jQuery Ajax 操作函数 1.返回顶部 1. jQuery Ajax 操作函数 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允 ...