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(0)); 如果調用同一目錄下的aa.ini文件,就應該這樣寫 inifilename:string; inifilename:=patch+'aa.ini';
獲取臨時文件夾路徑

//聲明: GetTempPath( nBufferLength: DWORD; {緩沖區大小} lpBuffer: PChar {緩沖區} ): DWORD; {返回實際長度} //舉例: var arr: array[0..MAX_PATH] of Char; num: DWORD; begin num := GetTempPath(MAX_PATH, arr); ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\} ShowMessage(IntToStr(num)); {29} 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,100); 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,文件名長八位,擴展名為3號,為保持DOS系統兼容而存在 若想獲取的文件名不帶路徑,可用: ChangeFileExt(TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename,''); 函數將擴展名改掉即可.目前好象就這一種辦法,誰還有更好的辦法?請告知 另附其它地方的資料: 1、文件名函數 文件名函數可以對文件的名稱、所在子目錄、驅動器和擴展名等進行操作。下表列出這些函數及其功能。 函數 說明 ExpandFileName() 返回文件的全路徑(含驅動器、路徑) ExtractFileExt() 從文件名中抽取擴展名 ExtractFileName() 從文件名中抽取不含路徑的文件名 ExtractFilePath() 從文件名中抽取路徑名 ExtractFileDir() 從文件名中抽取目錄名 ExtractFileDrive() 從文件名中抽取驅動器名 ChangeFileExt() 改變文件的擴展名 ExpandUNCFileName() 返回含有網絡驅動器的文件全路徑 ExtractRelativePath() 從文件名中抽取相對路徑信息 ExtractShortPathName() 把文件名轉化為DOS的8·3格式 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、3格式 參數: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(0)); end; function GetTempFileName: string; var vPath: string; begin SetLength(Result, 255); GetTempFileName(PChar(GetExePath), PChar('~'), 0, 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,3); //返回 True //判斷后綴名是不是 exe; 需要 uses Masks MatchesMask(ss,'*.exe'); //返回 True end; -------------------------------------------------------------------------------- //分解 ProcessPath (需要 uses FileCtrl) var s,p,f: string; d: Char; begin s := ParamStr(0); 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(0); s := MinimizeName(s,Self.Canvas,100); 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) > 0) 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) = 0 do begin if ((Sr.Attr and faDirectory) > 0) 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 / 1]) + '|' + sr.name); end; //Inttostr( while findnext(sr) = 0 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 / 1]) + '|' + 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, 1, Pos('.', s1)-1)); if Pos(str2, str1) > 0 then Result := True; end; begin if DirectoryExists(sDirPath) then begin if FindFirst(sDirPath + '\*.*', faAnyFile, sr) = 0 then begin if (sr.Name <> '.') and (sr.Name <> '..') and StrInFileName(sExt, sr.Name) then Memo1.Lines.Add(sDirPath + '\' + sr.Name); while (FindNext(sr) = 0) 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[0..255] of Char; begin //得到拖拽文件數量 n := DragQueryFile(Msg.wParam, $FFFFFFFF, Buffer, 255); //處理選擇多個文件 for i := 0 to n - 1 do begin //獲取拖拽文件名 DragQueryFile(Msg.wParam, i, Buffer, 255); //文件名就在Buffer里面了 if UpperCase(ExtractFileExt(Buffer)) = '.BZLX' then begin //判斷文件是否已經打開 if UpperCase(Buffer) = UpperCase('test.bzlx') then begin MessageDlg('文件test.bzlx已經打開!', (mtInformation),[mbOK],0); 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[0..1024] of Char; begin inherited; buffer[0]:=#0; DragQueryFile(Msg.WParam,0,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[0..1024] of Char; begin inherited; try buffer[0]:=#0; FilesCount:=DragQueryFile(Msg.WParam, $FFFFFFFF,nil,0); //獲取文件個數 Memo1.Lines.Add('文件總數為:'+IntToStr(FilesCount)); // 獲取文件名 for i:=0 to FilesCount-1 do begin DragQueryFile(Msg.WParam, i, buffer,256); //獲取拖拽文件路徑 Memo1.Lines.Add(buffer); end; finally DragFinish(Msg.WParam); end; end;
在DELPHI中如何得到一個文件名不帶擴展名

Edit4.Text:=paramstr(0);//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[0..MAX_PATH] of Char; num: DWORD; begin num := GetTempPath(MAX_PATH, arr); ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\} GetTempFileName(arr,'-My',16,f){C:\DOCUME~1\wy\LOCALS~1\Temp\-my10.temp} ShowMessage(IntToStr(num)); ShowMessage(IntToStr(num)); {29} end;