delphi文件夾名
A. delphi里怎麼把指定文件夾內的所有文件名輸出出來
1、使用FindFirst函數和FindNext函數就可以查找出文件夾內所有的文件名,編寫如下一個函數:
function searchfile(path:string):TStringList;
var SearchRec:TSearchRec;
found:integer;
list:TStringList;
begin
list:=TStringList.Create;
found:=FindFirst(path+'*.*',faAnyFile,SearchRec);
while found=0 do
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') and (SearchRec.Attr<>faDirectory)
then List.Add(SearchRec.Name);
found:=FindNext(SearchRec);
end;
FindClose(SearchRec);
searchfile:=list;
end;
2、使用searchfile(要查找的路徑),就可以得到所有文件名,如下示例:
procere TForm1.btn1Click(Sender: TObject);
begin
mmo1.Lines.AddStrings(searchfile('G:BaiDu\_codeigimg'));
end;
效果如下:
B. delphi 獲取根目錄下的文件名及子目錄下的文件名
findfirst,findnext,findclose....
搜索個例子給你:
procere
searchfileex(const
dir,
ext:
string;
files:
tstrings);
var
found:
tsearchrec;
i:
integer;
dirs:
tstrings;
finished:
integer;
stopsearch:
boolean;
begin
stopsearch
:=
false;
dirs
:=
tstringlist.create;
finished
:=
findfirst(dir
+
'*.*',
63,
found);
while
(finished
=
0)
and
not
(stopsearch)
do
begin
if
(found.name
<>
'.')
then
begin
if
(found.attr
and
fadirectory)
=
fadirectory
then
dirs.add(dir
+
found.name)
else
if
pos(uppercase(ext),
uppercase(found.name))
>
0
then
files.add(dir
+
found.name);
end;
finished
:=
findnext(found);
end;
findclose(found);
if
not
stopsearch
then
for
i
:=
0
to
dirs.count
-
1
do
searchfileex(dirs[i],
ext,
files);
dirs.free;
end;
3
procere
findsubdir(dirname:
string;
filestring:
tstrings);
var
searchrec:
tsearchrec;
begin
//找出所有下級子目錄。
if
(findfirst(dirname
+
'*.*',
fadirectory,
searchrec)
=
0)
then
begin
if
isvaliddir(searchrec)
then
filestring.add(dirname
+
searchrec.name);
while
(findnext(searchrec)
=
0)
do
begin
if
isvaliddir(searchrec)
then
filestring.add(dirname
+
searchrec.name);
end;
end;
findclose(searchrec);
end;
function
isvaliddir(searchrec:
tsearchrec):
boolean;
begin
if
(searchrec.attr
=
16)
and
(searchrec.name
<>
'.')
and
(searchrec.name
<>
'..')
then
result
:=
true
else
result
:=
false;
end;
C. 很簡單的,Delphi中得到一個文件的文件名(帶路徑),怎樣獲得純粹的文件名(就
ExtractFileName可以解出帶後綴的文件名,然後再用ChangeFileExt把後綴去掉,例如——ChangeFileExt(ExtractFileName(Application.ExeName),
'');
D. 怎麼在delphi中給一個文件夾改名字,謝謝回答!
修改文件夾名稱 Delphi syntax: function Rename(const Filename: WideString; const NewName: WideString): Integer; overload;
E. delphi獲取指定路徑下的exe文件名稱
1.第一個 if 里 把 SearchRec.Name=".exe"去掉
2.SearchRec.Name指的就是文件和文件夾全名,你的文件夾裡面根本沒有全名為.exe的文件,當然沒有結果
3.如果你想專門找EXE文件,應該在第一行的"*.*"改成"*.exe"
F. delphi如何獲得指定路徑文件的文件名
//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,''); 函數將擴展名改掉即可。
G. delphi中如何遍歷查找文件夾下的某文件名
procere EnumFileInQueue(path: PChar; fileExt: string; fileList: TStringList);
var
searchRec: TSearchRec;
found: Integer;
tmpStr: string;
curDir: string;
dirs: TQueue;
pszDir: PChar;
begin
dirs := TQueue.Create; //創建目錄隊列
dirs.Push(path); //將起始搜索路徑入隊
pszDir := dirs.Pop;
curDir := StrPas(pszDir); //出隊
{開始遍歷,直至隊列為空(即沒有目錄需要遍歷)}
while (True) do
begin
//加上搜索後綴,得到類似'c:\*.*' 、'c:\windows\*.*'的搜索路徑
tmpStr := curDir + '\*.*';
//在當前目錄查找第一個文件、子目錄
found := FindFirst(tmpStr, faAnyFile, searchRec);
while found = 0 do //找到了一個文件或目錄後
begin
//如果找到的是個目錄
if (searchRec.Attr and faDirectory) <> 0 then
begin
{在搜索非根目錄(C:\、D:\)下的子目錄時會出現'.','..'的"虛擬目錄"
大概是表示上層目錄和下層目錄吧。。。要過濾掉才可以}
if (searchRec.Name <> '.') and (searchRec.Name <> '..') then
begin
{由於查找到的子目錄只有個目錄名,所以要添上上層目錄的路徑
searchRec.Name = 'Windows';
tmpStr:='c:\Windows';
加個斷點就一清二楚了
}
tmpStr := curDir + '\' + searchRec.Name;
{將搜索到的目錄入隊。讓它先晾著。
因為TQueue裡面的數據只能是指針,所以要把string轉換為PChar
同時使用StrNew函數重新申請一個空間存入數據,否則會使已經進
入隊列的指針指向不存在或不正確的數據(tmpStr是局部變數)。}
dirs.Push(StrNew(PChar(tmpStr)));
end;
end
else //如果找到的是個文件
begin
{Result記錄著搜索到的文件數。可是我是用CreateThread創建線程
來調用函數的,不知道怎麼得到這個返回值。。。我不想用全局變數}
//把找到的文件加到Memo控制項
if fileExt = '.*' then
fileList.Add(curDir + '\' + searchRec.Name)
else
begin
if SameText(RightStr(curDir + '\' + searchRec.Name, Length(fileExt)), fileExt) then
fileList.Add(curDir + '\' + searchRec.Name);
end;
end;
//查找下一個文件或目錄
found := FindNext(searchRec);
end;
{當前目錄找到後,如果隊列中沒有數據,則表示全部找到了;
否則就是還有子目錄未查找,取一個出來繼續查找。}
if dirs.Count > 0 then
begin
pszDir := dirs.Pop;
curDir := StrPas(pszDir);
StrDispose(pszDir);
end
else
break;
end;
//釋放資源
dirs.Free;
FindClose(searchRec);
end;
//調用
procere TForm1.Button1Click(Sender: TObject);
var
dir: string;
FileNameList: TStringList;
begin
dir := trim(Edit1.Text);
FileNameList := TStringList.Create;
//EnumFileInQueue(PChar(dir), '.*', FileNameList);
EnumFileInQueue(PChar(dir), '.*', FileNameList);
ShowMessage(IntToStr(FileNameList.Count));
FileNameList.Free;
end;
H. Delphi 按鈕實現更改指定文件夾下的文件名
function ReNameFiles(): Boolean;
var
fn, txtfn, pdffn: string;
begin
{delphi 點一個按鈕 實現 如果存在c:/abc/a 這個文件 將其更改為c:/abc/a.txt
如果不存在 則將c:/abc/a.txt 更改為c:/abc/a.pdf 如果修改成功提示 成功 修改失敗提示 失敗
怎麼實現啊? 謝謝了}
Result := False;
fn := 'c:\abc\a';
txtfn := 'c:\abc\a.txt';
pdffn := 'c:\abc\a.pdf';
if FileExists(fn) then
begin
Result := RenameFile(fn, txtfn);
end
else begin
if FileExists(txtfn) then
begin
Result := RenameFile(txtfn, pdffn);
end;
end;
if Result then
ShowMessage('OK');
end;
I. delphi從文件夾中獲取文件名
用FindFirst,FindNext,FindClose
procere SearchFileEx(const Dir, Ext: string; Files: TStrings);
var
Found: TSearchRec;
i: integer;
Dirs: TStrings;
Finished: integer;
StopSearch: Boolean;
begin
StopSearch := False;
Dirs := TStringList.Create;
Finished := FindFirst(Dir + '*.*', 63, Found);
while (Finished = 0) and not (StopSearch) do
begin
if (Found.Name <> '.') then
begin
if (Found.Attr and faDirectory) = faDirectory then
Dirs.Add(Dir + Found.Name)
else
if Pos(UpperCase(Ext), UpperCase(Found.Name)) > 0 then
Files.Add(Dir + Found.Name);
end;
Finished := FindNext(Found);
end;
FindClose(Found);
if not StopSearch then
for i := 0 to Dirs.Count - 1 do
SearchFileEx(Dirs[i], Ext, Files);
Dirs.Free;
end;
3
procere FindSubDir(DirName: string; FileString: TStrings);
var
searchRec: TsearchRec;
begin
//找出所有下級子目錄。
if (FindFirst(DirName + '*.*', faDirectory, SearchRec) = 0) then
begin
if IsValidDir(SearchRec) then
FileString.Add(DirName + SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then
FileString.Add(DirName + SearchRec.Name);
end;
end;
FindClose(SearchRec);
end;
function IsValidDir(SearchRec: TSearchRec): Boolean;
begin
if (SearchRec.Attr = 16) and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
Result := True
else
Result := False;
end
J. 怎麼在delphi中實現搜索系統TXT文件並把文件名 文件路徑顯示在listview上
e是文件夾路徑,Filetpye
是文件類型,Tstr是一個TStrings,用來記錄搜索出來的所有文件路徑。你需要做的就是調用這個函數,並把Tstr導入到listview中
procere
FindFile(FindFileName:string;
Filetpye
:
string
;Tstr:TStrings);
var
FSearchRec,
DSearchRec:
TSearchRec;
FindResult:
integer;
function
IsDirNotation(ADirName:
String):
Boolean;
begin
Result
:=
(ADirName
=
'.')
or
(ADirName
=
'..');
end;
begin
if
FindFileName[Length(FindFileName)]<>
'\'
then
FindFileName:=FindFileName+'\';
FindResult
:=
FindFirst(FindFileName+'*.*',
faDirectory,
DSearchRec);
//tstr.Add(FindFileName+fsearchrec.Name);
while
FindResult
=
0
do
begin
if
((DSearchRec.Attr
and
faDirectory)
=
faDirectory)
and
not
IsDirNotation(DSearchRec.Name)
then
begin
FindFile(FindFileName+DSearchRec.Name,Filetpye,Tstr);
//
tstr.Add(FindFileName+fsearchrec.Name);
end;
FindResult
:=
FindNext(DSearchRec);
end;
FindResult
:=
FindFirst(FindFileName+'*.*',faAnyFile+faHidden+
faSysFile,FSearchRec);
//
tstr.Add(FindFileName+fsearchrec.Name);
try
while
FindResult
=
0
do
begin
//ShowMessage(FindFileName+fsearchrec.Name);
if
Pos(Filetpye,FindFileName+fsearchrec.Name)>0
then
begin
tstr.Add(FindFileName+fsearchrec.Name);
end;
FindResult
:=
FindNext(FSearchRec);
end;
finally
FindClose(FSearchRec);
end;
Findclose(DSearchRec);
end;