Delphi利用系统环境变量获取常用系统目录

//譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取:

  1. var
  2. s: string;
  3. begin
  4. s := GetEnvironmentVariable('WINDIR');
  5. ShowMessage(s); {C:\WINDOWS}
  6. end;

一些系统目录变量列表:

  1. --------变量-----------------------------,-------描述-------------------------------------------
  2. %WINDIR% {系统目录 - C:\WINDOWS}
  3. %SYSTEMROOT% {系统目录 - C:\WINDOWS}
  4. %SYSTEMDRIVE% {系统根目录 - C:}
  5. %HOMEDRIVE% {当前用户根目录 - C:}
  6. %USERPROFILE% {当前用户目录 - C:\Documents and Settings\wy}
  7. %HOMEPATH% {当前用户路径 - \Documents and Settings\wy}
  8. %TMP% {当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp}
  9. %TEMP% {当前用户临时文件夹 - C:\DOCUME~1\wy\LOCALS~1\Temp}
  10. %APPDATA% {当前用户数据文件夹 - C:\Documents and Settings\wy\Application Data}
  11. %PROGRAMFILES% {程序默认安装目录 - C:\Program Files}
  12. %COMMONPROGRAMFILES% {文件通用目录 - C:\Program Files\Common Files}
  13. %USERNAME% {当前用户名 - wy}
  14. %ALLUSERSPROFILE% {所有用户文件目录 - C:\Documents and Settings\All Users}
  15. %OS% {操作系统名 - Windows_NT}
  16. %COMPUTERNAME% {计算机名 - IBM-B63851E95C9}
  17. %NUMBER_OF_PROCESSORS% {处理器个数 - 1}
  18. %PROCESSOR_ARCHITECTURE% {处理器芯片架构 - x86}
  19. %PROCESSOR_LEVEL% {处理器型号 - 6}
  20. %PROCESSOR_REVISION% {处理器修订号 - 0905}
  21. %USERDOMAIN% {包含用户帐号的域 - IBM-B63851E95C9}
  22. %COMSPEC% {C:\WINDOWS\system32\cmd.exe}
  23. %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) 该函数同样返回路径名,但不包括结尾的字符“\”,除非返回的路径是根目录。
例如:获取当前程序的路径时就应该这样写

  1. var
  2. patch:string;
  3. ………
  4. patch:=ExtractFilePath(ParamStr());
  5. 如果调用同一目录下的aa.ini文件,就应该这样写
  6. inifilename:string;
  7. inifilename:=patch+'aa.ini';

获取临时文件夹路径

  1. //声明:
  2. GetTempPath(
  3. nBufferLength: DWORD; {缓冲区大小}
  4. lpBuffer: PChar {缓冲区}
  5. ): DWORD; {返回实际长度}
  6.  
  7. //举例:
  8. var
  9. arr: array[..MAX_PATH] of Char;
  10. num: DWORD;
  11. begin
  12. num := GetTempPath(MAX_PATH, arr);
  13. ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\}
  14. ShowMessage(IntToStr(num)); {}
  15. 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下都可以使用):

  1. uses shlobj;
  2. var
  3. pitem:PITEMIDLIST;
  4. s:string;
  5. begin
  6. shGetSpecialFolderLocation(handle,CSIDL_DESKTOP,pitem);
  7. setlength(s,);
  8. shGetPathFromIDList(pitem,pchar(s));
  9. end;

在字符串s中存储的就是桌面的路径值。简单吧!就是这么简单,但要是你不知道,你就得绕一个大圈子。

获取文件所在路径

  1. //delphi 获取文件所在路径
  2.  
  3. ExtractFileDrive :返回完整文件名中的驱动器,如"C:"
  4. ExtractFilePath:返回完整文件名中的路径,最后带“/”,如"C:/test/"
  5. ExtractFileDir:返回完整文件名中的路径,最后不带“/” ,如"C:/test"
  6. ExtractFileName:返回完整文件名中的文件名称 (带扩展名),如"mytest.doc"
  7. ExtractFileExt 返回完整文件名中的文件扩展名(带.),如".doc"
  8.  
  9. ExtractRelativePath 返回相对路径,定义如下:
  10. function ExtractRelativePath(const BaseName, DestName: string): string;
  11. 使用测试下如:
  12. SysUtils.ExtractRelativePath('C:/test','C:/Test/TestRelativePath'):返回TestRelativePath
  13. SysUtils.ExtractRelativePath('C:/Test/TestRelativePath','C:/test'):返回'../TestRelativePath'
  14. SysUtils.ExtractRelativePath('C:/Test/TestRelativePath/','C:/test'):返回'../../TestRelativePath'
  15. ExtractShortPathName :返回短文件名,即8+,文件名长八位,扩展名为3号,为保持DOS系统兼容而存在
  16.  
  17. 若想获取的文件名不带路径,可用:
  18. ChangeFileExt(TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename,''); 函数将扩展名改掉即可.目前好象就这一种办法,谁还有更好的办法?请告知
  19.  
  20. 另附其它地方的资料:
  21.  
  22. 、文件名函数
  23.   文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。下表列出这些函数及其功能。
  24. 函数 说明
  25. ExpandFileName() 返回文件的全路径(含驱动器、路径)
  26. ExtractFileExt() 从文件名中抽取扩展名
  27. ExtractFileName() 从文件名中抽取不含路径的文件名
  28. ExtractFilePath() 从文件名中抽取路径名
  29. ExtractFileDir() 从文件名中抽取目录名
  30. ExtractFileDrive() 从文件名中抽取驱动器名
  31. ChangeFileExt() 改变文件的扩展名
  32. ExpandUNCFileName() 返回含有网络驱动器的文件全路径
  33. ExtractRelativePath() 从文件名中抽取相对路径信息
  34. ExtractShortPathName() 把文件名转化为DOS8·格式
  35. MatchesMask() 检查文件是否与指定的文件名格式匹配
  36. ExtractFilePath(FileName:String)
  37. 该函数返回路径名,其结尾字符总是“/”
  38. ExtractFileDir(FileName:String)
  39. 该函数同样返回路径名,但不包括结尾的字符“/”,除非返回的路径是根目录。
  40.   下面就把这些函数作一一介绍:
  41. ExpandFileName()
  42.   原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName);
  43.   功能:返回文件的全路径(含驱动器、路径)
  44.   参数:FileName:要处理的文件名
  45.   例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:/MyBCB/Sample1.EXE
  46. ExtractFileExt()
  47.   原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName);
  48.   功能:从文件名中抽取扩展名
  49.   参数:FileName:要处理的文件名(全路径)
  50.   例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe"
  51. ExtractFileName()
  52.   原型:extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName);
  53.   功能:从文件名中抽取不含路径的文件名
  54.   参数:FileName:要处理的文件名
  55.   例:ShowMessage(ExtractFileExt("c://Winnt//SOL.EXE"));//显示"SOL.EXE"
  56. ExtractFilePath()
  57.   原型:extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);
  58.   功能:从文件名中抽取路径名
  59.   参数:FileName:要处理的文件名
  60.   例:ShowMessage(ExtractFilePath("Winnt//SOL.EXE"));//显示"Winnt/"
  61. ExtractFileDir()
  62.   原型:extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);
  63.   功能:从文件名中抽取目录名(和上个函数不同,不包括最后的"/")
  64.   参数:FileName:要处理的文件名
  65.   例:ShowMessage(ExtractFileDir("Winnt//SOL.EXE"));//显示"Winnt",注意和上个函数的区别
  66. ExtractFileDrive()
  67.   原型:extern PACKAGE AnsiString __fastcall ExtractFileDrive(const AnsiString FileName);
  68.   功能:从文件名中抽取驱动器名
  69.   参数:FileName:要处理的文件名
  70.   例:ShowMessage(ExtractFileDrive("c://Winnt//SOL.EXE"));//显示"c:"
  71. ChangeFileExt()
  72.   原型:extern PACKAGE System::AnsiString __fastcall ChangeFileExt(const System::AnsiString FileName, const System::AnsiString Extension);
  73.   功能:更改文件名的扩展名,不是对真正的文件进行改名,只是对文件名这个字符串进行处理
  74.   参数:FileName:要改名的文件名,Extension:新的扩展名
  75.   例:ShowMessage(ChangeFileExt("c://Winnt//SOL.EXE",".OOO"));//显示"c:/winnt/SOL.OOO"
  76. ExpandUNCFileName()
  77.   原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName);
  78.   功能:返回含有网络驱动器的文件全路径,格式为://机器名/共享名/文件名
  79.   参数:FileName:要处理的文件名
  80.   例:ShowMessage(ExpandUNCFileName("F://Winnt//SOL.EXE"));/*如果F:是映射的网络驱动器,则显示"
  81. ⑼ExtractRelativePath()
  82.   原型:extern PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BaseName, const AnsiString DestName);
  83.   功能:从文件名中抽取相对路径信息,如"../sss/ss.asd"这种形式
  84.   参数:BaseName:基准文件名;DestName:目标文件名
  85.   例:ShowMessage(ExtractRelativePath("D://Source//c//1.123","D://Source//Asm//dz.asm"));/*显示"../asm/dz.asm"*/
  86. ExtractShortPathName()
  87.   原型:extern PACKAGE AnsiString __fastcall ExtractShortPathName(const AnsiString FileName);
  88.   功能:把文件名转换为DOS8、格式
  89.   参数:FileName:要处理的文件名
  90.   例:ShowMessage(ExtractShortPathName("E://Program Files//Dual Wheel Mouse//4dmain.exe"));/*显示"E:/Progra~1/dualwh~1/4dmain.exe"*/
  91. MatchesMask()
  92.   原型:extern PACKAGE bool __fastcall MatchesMask(const AnsiString Filename, const AnsiString Mask);
  93.   功能:检查文件是否与指定的文件名格式匹配
  94.   参数:FileName:要处理的文件名;Mask:文件名格式,支持通配符
  95.   例:ShowMessage(MatchesMask("Lxf.exe","*.?x?));//显示"true"

返回临时文件夹文件路径

  1. function GetExePath: string;
  2. begin
  3. Result := ExtractFilePath(ParamStr());
  4. end;
  5.  
  6. function GetTempFileName: string;
  7. var
  8. vPath: string;
  9. begin
  10. SetLength(Result, );
  11. GetTempFileName(PChar(GetExePath), PChar('~'), , PChar(result));
  12.  
  13. vPath := GetExePath + 'temp\';
  14. if not SysUtils.DirectoryExists(vPath) then
  15. SysUtils.ForceDirectories(vPath);
  16. result := PChar(Result); //去掉多余的空字符
  17. Result := vPath + ExtractFileName(Result);
  18. end;

 文件路径问题

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, ExtCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. Button2: TButton;
  13. LabeledEdit1: TLabeledEdit;
  14. LabeledEdit2: TLabeledEdit;
  15. OpenDialog1: TOpenDialog;
  16. Button3: TButton;
  17. procedure Button1Click(Sender: TObject);
  18. procedure Button3Click(Sender: TObject);
  19. procedure Button2Click(Sender: TObject);
  20. private
  21. { Private declarations }
  22. public
  23. { Public declarations }
  24. end;
  25.  
  26. var
  27. Form1: TForm1;
  28.  
  29. implementation
  30.  
  31. {$R *.dfm}
  32.  
  33. procedure TForm1.Button1Click(Sender: TObject);
  34. begin
  35. if OpenDialog1.Execute() then
  36. begin
  37. LabeledEdit1.Text:= OpenDialog1.FileName;
  38. end;
  39. end;
  40.  
  41. procedure TForm1.Button2Click(Sender: TObject);
  42. begin
  43. if OpenDialog1.Execute() then
  44. begin
  45. LabeledEdit2.Text:= OpenDialog1.FileName;
  46. end;
  47. end;
  48.  
  49. procedure TForm1.Button3Click(Sender: TObject);
  50. begin
  51. //RenameFile('Oldname', 'Newname');
  52. MoveFile(PChar(LabeledEdit1.Text), PChar(LabeledEdit2.Text));
  53. end;
  54. function ReFileName(filepath: string): string;
  55. begin
  56. result := ChangeFileExt(ExtractFileName(filepath), '');
  57. {
  58. Edit4.Text:=paramstr(0);//C:\FILE\Project1.exe
  59. Edit2.Text:=ExtractFilePath(Application.ExeName);//C:\FILE\
  60. Edit1.Text:=ExtractFileName(Application.ExeName);//Project1.exe
  61. Edit3.Text:=ExtractFileExt(Application.ExeName);//.exe
  62. }
  63. end;
  64. if FileExists(extractFilePath(application.exeName)+'newFile\123.txt')
  65. then
  66. label2.Caption :='创建成功'
  67. else
  68. label2.Caption :='创建失败';
  69. end;
  70. end.

 文件路径相关的字符串操作

  1. //delphi文件路径相关的字符串操作
  2. uses
  3. HTTPApp, Masks;
  4.  
  5. procedure TForm1.Button1Click(Sender: TObject);
  6. var
  7. ss,s: string;
  8. begin
  9. //先提取一个文件名的字符串
  10. ss := Application.ExeName;
  11. ShowMessage(ss); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe
  12.  
  13. //路径
  14. s := ExtractFilePath(ss);
  15. ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\
  16.  
  17. //所在文件夹
  18. s := ExtractFileDir(ss);
  19. ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects
  20.  
  21. //所在逻辑盘
  22. s := ExtractFileDrive(ss);
  23. ShowMessage(s); //C:
  24.  
  25. //文件名
  26. s := ExtractFileName(ss);
  27. ShowMessage(s); //Project1.exe
  28.  
  29. //文件扩展名
  30. s := ExtractFileExt(ss);
  31. ShowMessage(s); //.exe
  32.  
  33. //相对路径
  34. s := ExtractRelativePath('C:\Documents and Settings\wy\My Documents\',ss);
  35. ShowMessage(s); //RAD Studio\Projects\Project1.exe
  36.  
  37. //dos下的短文件名
  38. s := ExtractShortPathName(ss);
  39. ShowMessage(s); //C:\DOCUME~1\wy\MYDOCU~1\RADSTU~1\Projects\Project1.exe
  40.  
  41. //转换到Unix路径格式, 需要 uses HTTPApp
  42. s := DosPathToUnixPath(ss);
  43. ShowMessage(s); //C:/Documents and Settings/wy/My Documents/RAD Studio/Projects/Project1.exe
  44.  
  45. //转Unix路径格式为Window格式, 是 DosPathToUnixPath 的逆操作
  46. s := ExpandUNCFileName(DosPathToUnixPath(ss));
  47. ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe
  48.  
  49. //去掉结尾的路径分隔符
  50. s := ExcludeTrailingPathDelimiter(ExtractFilePath(ss));
  51. ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects
  52.  
  53. //去掉结尾的路径分隔符, 只是调用:ExcludeTrailingPathDelimiter
  54. s := ExcludeTrailingBackslash(ExtractFilePath(ss));
  55. ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects
  56.  
  57. //更换扩展名, 并不修改文件, 只是替换字符串:
  58. s := ChangeFileExt(ss,'.bak');
  59. ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.bak
  60.  
  61. //更换文件路径:
  62. s := ChangeFilePath(ss,'c:\temp');
  63. ShowMessage(s); //c:\temp\Project1.exe
  64.  
  65. //判断第几个字符是否是路径分隔符:
  66. IsPathDelimiter(ss,); //返回 True
  67.  
  68. //判断后缀名是不是 exe; 需要 uses Masks
  69. MatchesMask(ss,'*.exe'); //返回 True
  70. end;
  71. --------------------------------------------------------------------------------
  72.  
  73. //分解 ProcessPath (需要 uses FileCtrl)
  74. var
  75. s,p,f: string;
  76. d: Char;
  77. begin
  78. s := ParamStr();
  79. ShowMessage(s); //C:\Documents and Settings\wy\My Documents\RAD Studio\Projects\Project1.exe
  80. ProcessPath(s,d,p,f);
  81. ShowMessage(d); //C
  82. ShowMessage(p); //\Documents and Settings\wy\My Documents\RAD Studio\Projects
  83. ShowMessage(f); //Project1.exe
  84. end;
  85. --------------------------------------------------------------------------------
  86.  
  87. //压缩显示 MinimizeName (需要 uses FileCtrl)
  88. var
  89. s: string;
  90. begin
  91. s := ParamStr();
  92. s := MinimizeName(s,Self.Canvas,);
  93. ShowMessage(s); //C:\...\Project1.exe
  94. end;

搜索文件夹和文件

  1. function FindFile(Path: string): string; {搜索文件夹和文件}
  2. var
  3. Sr: TSearchRec;
  4. CommaList: TStringList;
  5. s: string;
  6. dt: TDateTime;
  7. begin
  8. commalist := Tstringlist.Create;
  9. try
  10. Findfirst(path + '*.*', faAnyFile, sr);
  11. if ((Sr.Attr and faDirectory) > ) and (Sr.Name <> '.') then
  12. begin
  13. dt := FileDateToDateTime(sr.Time);
  14. s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
  15. commalist.add('*' + s + sr.name);
  16. end;
  17. while findnext(sr) = do
  18. begin
  19. if ((Sr.Attr and faDirectory) > ) and (Sr.Name <> '..') then
  20. begin
  21. dt := FileDateToDateTime(sr.Time);
  22. s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
  23. commalist.add('*' + s + sr.name);
  24. end;
  25. end;
  26. FindClose(sr);
  27. FindFirst(path + '*.txt', faArchive + faReadOnly + faHidden + faSysFile, Sr);
  28. if Sr.Attr <> faDirectory then
  29. begin
  30. dt := FileDateToDateTime(sr.Time);
  31. s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
  32. commalist.add('\' + s+ Format('%.0n', [sr.Size / ]) + '|' + sr.name);
  33. end; //Inttostr(
  34. while findnext(sr) = do
  35. begin
  36. if (sr.Attr <> faDirectory) then
  37. begin
  38. dt := FileDateToDateTime(sr.Time);
  39. s := FormatDateTime('yyyy-mm-dd hh:nn', dt);
  40. commalist.add('\' + s +Format('%.0n', [sr.Size / ]) + '|' + sr.name);
  41. end;
  42. end;
  43. FindClose(Sr);
  44. except
  45. end;
  46. Result := commalist.Text; //Result是消息的 定义
  47. commalist.Free;
  48. end;

搜索指文件,幷获取该文件的完整路径

  1. procedure TForm1.GetDirFileNameList(sDirPath, sExt: string);
  2. var
  3. sr: TSearchRec;
  4.  
  5. function StrInFileName(s1, sName: string): Boolean;
  6. var
  7. str1, str2: string;
  8. begin
  9. Result := False;
  10. str1 := UpperCase(sName);
  11. str2 := UpperCase(Copy(s1, , Pos('.', s1)-));
  12. if Pos(str2, str1) > then Result := True;
  13. end;
  14. begin
  15. if DirectoryExists(sDirPath) then
  16. begin
  17. if FindFirst(sDirPath + '\*.*', faAnyFile, sr) = then
  18. begin
  19. if (sr.Name <> '.') and (sr.Name <> '..') and StrInFileName(sExt, sr.Name) then
  20. Memo1.Lines.Add(sDirPath + '\' + sr.Name);
  21. while (FindNext(sr) = ) do
  22. begin
  23. if (sr.Name <> '.') and (sr.Name <> '..') and StrInFileName(sExt, sr.Name) then
  24. Memo1.Lines.Add(sDirPath + '\' + sr.Name);
  25. end;
  26. end;
  27. FindClose(sr);
  28. end;
  29. end;
  30.  
  31. procedure TForm1.Button1Click(Sender: TObject);
  32. begin
  33. GetDirFileNameList('E:\king', '123.exe');
  34. end;

软件实现双击打开文件

  1. unit shjAssociateFileType;
  2.  
  3. interface
  4. uses Windows, Registry;
  5. {将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明}
  6. function AssignToProgram(const strFileExtension, strDiscription, strExeFileName: string ): boolean;
  7. implementation
  8. {将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明}
  9. function AssignToProgram(const strFileExtension, strDiscription, strExeFileName: string ): boolean;
  10. var
  11. regFile: TRegistry;
  12. begin
  13. //建立一个Registry实例
  14. regFile := TRegistry.Create;
  15. with regFile do
  16. begin
  17. //设置根键值为HKEY_CLASSES_ROOT
  18. RootKey := HKEY_CLASSES_ROOT;
  19. //创建或者打开扩展名自动关联注册键
  20. OpenKey( '.' + strFileExtension, true);
  21. //设置扩展名自动关联
  22. WriteString('', strFileExtension + '_Auto_File');
  23. //关闭键
  24. CloseKey;
  25. //创建或者打开打开自动关联键
  26. OpenKey(strFileExtension + '_Auto_File', true);
  27. //设置文件类型说明
  28. WriteString('', strDiscription);
  29. //关闭键
  30. CloseKey;
  31. //创建或打开关联程序键
  32. OpenKey(strFileExtension + '_Auto_File\shell\open\command', true);
  33. //设置关联程序(注意:%1加上双引号,可以解决文件路径中含空格的问题)
  34. WriteString('',strExeFileName + ' "%1"');
  35. //关闭键
  36. CloseKey;
  37. //打开默认图标键
  38. OpenKey(strFileExtension + '_Auto_File\defaulticon',true);
  39. //关联默认图标
  40. WriteString('', strExeFileName + ',0');
  41. //释放
  42. Free;
  43. Result := True;
  44. end;
  45. end;
  46. end.

软件实现拖拽打开文件

  1. //声明
  2. protected
  3. procedure WMDROPFILES(var Msg : TMessage); message WM_DROPFILES;
  4. ------------------------------------------------------------------------------------------------------------------------
  5. //实现
  6. procedure TFormMain.WMDROPFILES(var Msg: TMessage);
  7. var
  8. i, n: Integer;
  9. Buffer: Array[..] of Char;
  10. begin
  11. //得到拖拽文件数量
  12. n := DragQueryFile(Msg.wParam, $FFFFFFFF, Buffer, );
  13. //处理选择多个文件
  14. for i := to n - do
  15. begin
  16. //获取拖拽文件名
  17. DragQueryFile(Msg.wParam, i, Buffer, );
  18. //文件名就在Buffer里面了
  19. if UpperCase(ExtractFileExt(Buffer)) = '.BZLX' then
  20. begin
  21. //判断文件是否已经打开
  22. if UpperCase(Buffer) = UpperCase('test.bzlx') then
  23. begin
  24. MessageDlg('文件test.bzlx已经打开!', (mtInformation),[mbOK],);
  25. exit;
  26. end;
  27. //打开文件
  28. OpenFile(Buffer);
  29. exit;
  30. end;
  31. end;
  32. //结束拖拽
  33. DragFinish(Msg.wParam);
  34. end;
  35. ------------------------------------------------------------------------------------------------------------------------
  36. //初始化
  37. procedure TFormMain.FormCreate(Sender: TObject);
  38. begin
  39. //使窗口句柄可以接收拖拽操作
  40. DragAcceptFiles(Handle, True);
  41. end;

文件拖拽获取路径

支持单文件

1. 添加单元 shellAPI

2. 在过程里 procedure TForm1.FormCreate(Sender: TObject);

加入此函数DragAcceptFiles(Form1.Handle,true); //注册拖放文件

3. 在 public 里声明
procedure TFfile(var Msg:TMessage);message WM_DROPFILES;

4.函数实现

  1. procedure TForm1.TFfile(var Msg:TMessage);
  2. var
  3. buffer:array[..] of Char;
  4. begin
  5. inherited;
  6. buffer[]:=#;
  7. DragQueryFile(Msg.WParam,,buffer,sizeof(buffer)); //获取拖入文件名称
  8. label1.Caption:=PChar(@buffer); //字符数组转换成字符串
  9. 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.函数实现

  1. procedure TForm1.TFfile(var Msg:TMessage);
  2. var
  3. FilesCount: Integer;// 文件总数
  4. i: Integer;
  5. buffer:array[..] of Char;
  6. begin
  7. inherited;
  8. try
  9. buffer[]:=#;
  10. FilesCount:=DragQueryFile(Msg.WParam, $FFFFFFFF,nil,); //获取文件个数
  11. Memo1.Lines.Add('文件总数为:'+IntToStr(FilesCount));
  12. // 获取文件名
  13. for i:= to FilesCount- do
  14. begin
  15. DragQueryFile(Msg.WParam, i, buffer,); //获取拖拽文件路径
  16. Memo1.Lines.Add(buffer);
  17. end;
  18. finally
  19. DragFinish(Msg.WParam);
  20. end;
  21. end;

在DELPHI中如何得到一个文件名不带扩展名

  1. Edit4.Text:=paramstr();//C:\FILE\Project1.exe
  2. Edit2.Text:=ExtractFilePath(Application.ExeName);//C:\FILE\
  3. Edit1.Text:=ExtractFileName(Application.ExeName);//Project1.exe
  4. //project
  5. Edit3.Text:=ExtractFileExt(Application.ExeName);//.exe
  6. Edit1.Text:=ChangeFileExt(ExtractFileName(Application.ExeName),'') ; //获取到应用程序名后,将后缀名清空就可以啦。

生成临时文件

  1. //举例:
  2. var
  3. arr,f: array[..MAX_PATH] of Char;
  4. num: DWORD;
  5. begin
  6. num := GetTempPath(MAX_PATH, arr);
  7. ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\}
  8. GetTempFileName(arr,'-My',,f){C:\DOCUME~1\wy\LOCALS~1\Temp\-my10.temp}
  9. ShowMessage(IntToStr(num));
  10. ShowMessage(IntToStr(num)); {}
  11. end;

Delphi 文件操作(路径、目录)的更多相关文章

  1. Linux基础(10)AIO项目设计与POSIX文件操作和目录管理

    实现fast-cp :拷贝文件到目标对象 Linux的七种文件类型 :https://blog.csdn.net/linkvivi/article/details/79834143 ls -al :h ...

  2. delphi文件操作(比较全)

    Delphi中默认有input和output两个文件变量,使用可以不用定义,直接使用. 但: input:只读.output:只写.用时注意以免引起异常. 文件是由文件名标识的一组数据的集合,文件通常 ...

  3. delphi 文件操作(信息获取)

    delphi获取Exe文件版本信息的函数 Type TFileVersionInfo = Record FixedInfo:TVSFixedFileInfo; {版本信息} CompanyName:S ...

  4. Delphi文件操作函数

    文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道.文件的本质是一个数据流,所有的文件实际上是一串二进制序列.文件管理包括:1.文件操作.2.目录操作.3.驱动器操作.三部分. 1.常见文 ...

  5. [C/C++][文件操作] 对比目录并列出同名较新文件、较旧文件 0.1

    主要是模仿robocopy的部分功能 (robocopy /L 参数可以列出本地目录和备份目录中的异同之处,主要是标记出:较新的.较旧的.多出的文件 ) 现在还不会写GUI,打算后面自己做目录树dif ...

  6. (转) unity 在移动平台中,文件操作路径详解

    http://www.unitymanual.com/thread-23491-1-1.html 今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够 ...

  7. Unity文件操作路径

    Unity3D中的资源路径: Application.dataPath:此属性用于返回程序的数据文件所在文件夹的路径.例如在Editor中就是Assets了. Application.streamin ...

  8. delphi文件操作的总结

    csfinal90我的:收件箱资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 windzb的专栏 目录视图 摘要视图 订阅 IT俱乐部创始人杜鸿飞专访       ...

  9. unity 在移动平台中,文件操作路径详解

    今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够更好.更快的掌握,当然,如有不足的地方 欢迎指正!!! 相信大家在开发过程中,难免会保存一些文件在 ...

随机推荐

  1. shell cut从一个文件中提取列

    cut 语法 cut -d 分隔符 -f 列索引 file.txt #将文件file.txt以分隔符.进行分割,并取出第2列.cut -d '.' -f 3- file.txt #将文件file.tx ...

  2. linux su su-的区别

    su只是切换用户. su - 切换用户并切换shell环境. su another pwd后为/home/current su - another pwd后为/home/another

  3. Python--前端之HTML

    html概述和基本结构 HTML概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言 ...

  4. 工厂方法配置bean

    1:静态工厂方法配置bean 1):对象 package com.spring.helloworld; public class Car { private String name; private ...

  5. CSS分组和嵌套选择器

    CSS 分组 和 嵌套 选择器 分组选择器 在样式表中有很多具有相同样式的元素.直线模组哪家好 h1 {     color:green; } h2 {     color:green; } p { ...

  6. SPOJ LEXSTR 并查集

    题目描述: Taplu and Abhishar loved playing scrabble. One day they thought of inventing a new game using ...

  7. 【dart学习】-- Dart之网络请求操作

    Flutter的请求网络有多种方式,一种是使用dart io中的HttpClient发起的请求,一种是使用dio库,另一种是使用http库,先学一下get和post,put.delete就等后面用到在 ...

  8. Django中object.all是什么东西

    前言 先抛出一个问题.银行就相当于一个数据库,你去银行取钱存钱办卡销卡,是你告诉银行柜员方便还是你自己去操作电脑办卡取卡方便?(你还不一定会,假设自动存款机还没发明),object在数据库中就相当于银 ...

  9. python进阶:类和对象

    @修饰符:将被修饰的函数作为参数,运行修饰函数 实例方法: 静态方法:@staticmethod 类方法:@classmethod 自省:通过一定的机制查询到对象的内部结构 序列类: 列表推导式(例表 ...

  10. JQ-jQuery-Ajax:jQuery Ajax 操作函数

    ylbtech-JQ-jQuery-Ajax:jQuery Ajax 操作函数 1.返回顶部 1. jQuery Ajax 操作函数 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允 ...