我曾经尝试过FindFirst按字母顺序找到文件,但最近我发现虽然大多数情况下都是如此,但是有些文件不按字母顺序排列.
if FindFirst( AProgramPath, faAnyFile, ASearchRec ) = 0 then
repeat
AFilename := ASearchRec.name;
until FindNext( ASearchRec ) <> 0;
FindClose( ASearchRec );
Run Code Online (Sandbox Code Playgroud)
在这里的特定文件夹中有大约300个文本文件,但是大约8-10个文件以正确的字母顺序返回.
如果findfirst不按字母顺序返回文件,是否有一种方法可用于按字母顺序对文件夹内容进行排序,以便findfirst按字母顺序返回文件?
问候,
法案
RRU*_*RUZ 11
FindFirst函数不对搜索结果进行排序,但您可以使用TStringList对文件进行排序.
Procedure GetOrderFiles();
var
ListFiles : TStringList;
result : integer;
ASearchRec: TSearchRec;
begin
ListFiles := TStringList.Create;
try
ListFiles.sorted := True;
result := findFirst(AProgramPath,faAnyFile,ASearchRec );
try
while result = 0 do
begin
if (ASearchRec.name <> '.') and (ASearchRec.name <> '..') then
ListFiles.add(ASearchRec.name);
result:=FindNext(ASearchRec );
end;
finally
FindClose(ASearchRec );
end;
//process your files
//....
finally
ListFiles.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
FindFirstFile和FindNextFile以它们在目录中出现的顺序返回文件.在NTFS系统上,这大致按字母顺序排列.对于像FAT32这样的东西,订单是相当不可预测的(只要没有文件被删除,它就是创建的顺序,但是当一个文件被删除时,你在该目录中创建的下一个文件将重新使用被删除的留下的插槽文件).对于某些远程文件系统,订单可能更难以预测.
它可能在磁盘上的项目至少有一些文件系统(如FAT/FAT32)排序.在DOS时代,这样做的实用程序相当普遍,但在当前系统中,它们大多不受欢迎,因为Windows资源管理器(等等)主要是对文件进行排序,而不是仅按FindFirstFile/FindNextFile提供的顺序显示它们.
国际海事组织,你应该认真考虑做同样的事情.对磁盘上的数据进行排序在DOS下工作得很好,因为在大多数情况下背景中没有发生太多事情,所以如果你对目录进行了排序,它至少会暂时排序.如今,典型的Windows机箱在启动时运行了20多个进程,因此即使您对目录进行排序,也不能依赖它在任何时间长度内保持排序.
| 归档时间: |
|
| 查看次数: |
6913 次 |
| 最近记录: |