首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FindFirst是否应该按字母顺序返回找到的文件?

FindFirst是否应该按字母顺序返回找到的文件?
EN

Stack Overflow用户
提问于 2009-10-21 00:07:07
回答 3查看 7.9K关注 0票数 9

我曾认为FindFirst是按字母顺序查找文件的,但最近我发现,虽然大多数情况下确实如此,但也有一些文件没有按字母顺序排列。

代码语言:javascript
复制
if FindFirst( AProgramPath, faAnyFile, ASearchRec ) = 0 then
repeat
  AFilename := ASearchRec.name;
until FindNext( ASearchRec ) <> 0;
FindClose( ASearchRec );

在包含大约300个文本文件的特定文件夹中,除了大约8-10个文件之外,所有的文件都会按正确的字母顺序返回。

如果findfirst没有按字母顺序返回文件,有没有一种方法可以用来按字母顺序对文件夹内容进行排序,以便findfirst按字母顺序返回文件?

致以敬意,

帐单

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-20 16:24:42

FindFirst函数不对搜索结果进行排序,但您可以使用TStringList对文件进行排序。

代码语言:javascript
复制
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;
票数 12
EN

Stack Overflow用户

发布于 2009-10-21 00:09:29

不是的。请参阅documentation

FindFirstFile函数打开一个搜索句柄并返回有关文件系统找到的名称与指定模式匹配的第一个文件的信息。当给定相同的文件名字符串模式时,这可能是也可能不是目录列表应用程序(如dir命令)中出现的第一个文件或目录。这是因为FindFirstFile不会对搜索结果进行排序。(已添加强调)

票数 11
EN

Stack Overflow用户

发布于 2009-10-20 16:26:23

FindFirstFile和FindNextFile按照文件在目录中的出现顺序返回文件。在NTFS系统上,这大致是按字母顺序排列的。对于像FAT32这样的东西,顺序是相当不可预测的(只要没有文件被删除,它就是创建的顺序,但是当一个文件被删除时,您在该目录中创建的下一个文件将重用被删除的文件留下的槽)。对于某些远程文件系统,顺序可能更难预测。

对于至少几个文件系统(例如FAT/FAT32),可以对磁盘上的项进行排序。在DOS时代,这样做的实用程序相当普遍,但在目前的系统中,它们大多已不再受欢迎,因为Windows资源管理器(以及类似工具)主要对文件进行排序,而不仅仅是按照FindFirstFile/FindNextFile提供的顺序显示它们。

国际海事组织,你可能应该认真考虑做同样的事情。对磁盘上的数据进行排序在DOS下工作得很好,因为大部分时间后台都没有发生太多事情,所以如果你对一个目录进行排序,它会保持排序状态,至少在一段时间内是这样。现在,典型的Windows box在启动时会运行20+进程,所以即使您对目录进行排序,也不能指望它会在任何时间内保持排序状态。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1595727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档