如何遍历文件(200分)

  • 主题发起人 主题发起人 WngZhng
  • 开始时间 开始时间
W

WngZhng

Unregistered / Unconfirmed
GUEST, unregistred user!
如何依次寻找指定文件下的.mp3文件,并将找到的文件的路径存成txt文件
mp3文件可能位于多层文件夹下
请给出源代码
 
是太难了还是太简单了
 
提供你一个思路:
采用TSEARCHREC其中有FINDFIRST和FINDNEXT方法可以找到标记为MP3的文件(在一个目录)
中,然后将目录作为文件,采用递归方式调用,就可以了,我的代码不在家里,否则
我回给你拷一份的。
 
TSEARCHREC没用过,能说详细点吗
 
对不起,我有做好程序,请写信到我的信箱:
cgh0717@sina.com告知我你的信箱,我把程序代码email给你,谢谢
 
在本站使用搜索功能:
搜索已答问题,
输入关键词: 遍历 文件
中间最好加个空格
 
procedure FindFile(Dir: String);
var
sr: TSearchRec;
FileAttrs: Integer;
begin
FileAttrs := faAnyFile;
if FindFirst(Dir + '*.mp3', FileAttrs, sr) = 0 then
begin
if (sr.Attr and FileAttrs) = sr.Attr then
ListBox1.Items.Add(Dir + sr.Name);
while FindNext(sr) = 0 do
if (sr.Attr and FileAttrs) = sr.Attr then
ListBox1.Items.Add(Dir + sr.Name);
FindClose(sr);
end;
end;
 
下面这个函数用递归的方式,遍历指定目录下的所有文件,
计算出所有文件总的字节长度
写得比较粗糙,不过基本原理就是这样了

function GetPathSize(pathname: string): int64;
var
FindData: TWin32FindData;
hf:THandle;
tsize:int64;
b:boolean;
i:integer;
tmpstr:string;
begin
hf := Windows.FindFirstFile(PChar(pathname + '/*.*'), FindData);
if hf = INVALID_HANDLE_VALUE then
begin
Result := 0;
exit;
end;
b := true;
tsize := 0;
i:=0;
while b do
begin
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
tsize := tsize + FindData.nFileSizeHigh * MAXDWORD + FindData.nFileSizeLow;
inc(i);
end
else
begin
tmpstr := FindData.cFileName + '';
if (tmpstr <> '.') and (tmpstr <> '..') then
begin
tsize := tsize + GetPathSize(pathname + '/' + FindData.cFileName);
end;
end;
b := windows.FindNextFile(hf,FindData);
end;
Result := tsize;

end;
 
呵呵,怎么快就贴一来的,我就不用说了。就是这样的。
 
多人接受答案了。
 
后退
顶部