jsxjd,我新开一个贴了,那个贴我不能跟贴!(50分)

  • 主题发起人 主题发起人 Dephic
  • 开始时间 开始时间
D

Dephic

Unregistered / Unconfirmed
GUEST, unregistred user!
jsxjd,应该不是受文件夹属性的限制,因为我已经将文件夹选项设置为“显示所有文件”
会不会是一些98版本要打一些补丁程序才支持TSearchRec操作呢?
 
顺便给我一点!!
 
你能具体说一下这一类文件(夹)有什么特征吗?
或把主要代码贴出来。

也可能代码处理不当或在代码中无间过滤掉了。
 
wiseinfo,回答了问题,理所当然会有你的!但就这一句,可不能叫做回答了问题啊![:D]
 
代码还是那天的代码,我再贴一次吧!
{---------------------------------------
文件查找函数 MySearchFile

参数说明:
sFileName: 要查找的文件名称
sRootDir: 指定在哪个目录中查找
bFileOnly: 是否只查找文件
bRecurse: 是否查找子目录

返回值:
FileList: 查找结果列表
----------------------------------------}
function MySearchFile(sFileName, sRootDir: string;
bFileOnly, bRecurse: boolean): TStringList;
//内嵌文件查找递归过程
procedure DoSearchFile(sFileName, sRootDir: string;
bFileOnly, bRecurse: boolean;
var FileList: TStringList);
var
Found: integer;
SearchRec: TSearchRec;
begin
//开始查找
Found := FindFirst(sRootDir + '/*.*', faAnyFile, SearchRec);
while Found = 0 do
begin
//遇到子目录时确定是否查找子目录和是否将符合条件的子目录加入查找结果
if ((SearchRec.Attr and faDirectory) = faDirectory) and (SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
begin
if (AnsiCompareText(sFileName, SearchRec.Name) = 0) and not bFileOnly then
FileList.Add(sRootDir + '/' + SearchRec.Name);
if bRecurse then
DoSearchFile(sFileName, sRootDir + '/' + SearchRec.Name, bFileOnly, bRecurse, FileList);
end
//找到符合条件的文件时加入查找结果
else if AnsiCompareText(sFileName, SearchRec.Name) = 0 then
FileList.Add(sRootDir + '/' + SearchRec.Name);
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
var
FileList: TStringList;
begin
FileList := TStringList.Create;
FileList.Clear;
DoSearchFile(sFileName, sRootDir, bFileOnly, bRecurse, FileList);
Result := FileList;
end;

调用:
s := MySearchFile('aaa.txt','D:',true,true);

不过今天我看了这个98系统唯一一个可疑的地方,就是在资源管理器中所有的文件都看不
见后缀名!
 
JSXJD,你能搞定这个吗?? 1450847
 
wiseinfo,你不能有这种行为啊,在别人的贴子里问你自己的问题!
 
在资源管理器中所有的文件都看不见后缀名,是因为文件件选项里面的,隐藏已经文件类型扩展名
的原因吧!
 
呵呵~~我会另个给分的!你也可以看看!!也有分啊!
那个已经结贴了!!虽然没有解决!!

我后来不打算做那种样子了!!我会再开贴给分!
 
你那个东东要干吗呢???
 
GetDriveType的值是1的时候,代表此盘符是什么类型的?
 
帮助里:The root directory does not exist.
这到底是代表什么啊?根目录不存在?这什么意思啊?
 
DRIVE_UNKNOWN = 0;
{$EXTERNALSYM DRIVE_UNKNOWN}
DRIVE_NO_ROOT_DIR = 1;
{$EXTERNALSYM DRIVE_NO_ROOT_DIR}
DRIVE_REMOVABLE = 2;
{$EXTERNALSYM DRIVE_REMOVABLE}
DRIVE_FIXED = 3;
{$EXTERNALSYM DRIVE_FIXED}
DRIVE_REMOTE = 4;
{$EXTERNALSYM DRIVE_REMOTE}
DRIVE_CDROM = 5;
{$EXTERNALSYM DRIVE_CDROM}
DRIVE_RAMDISK = 6;
{$EXTERNALSYM DRIVE_RAMDISK}
 
jsxjd,你列出的这些我也看见了,在windows单元里
但DRIVE_NO_ROOT_DIR到底是什么意思呢?
98装在C驱里,但居然GetDriveType('C:')=1
为什么不等于3呢?
 
容易出问题的地方可能是 AnsiCompareText和 FileList 的处理。
但我看不出什么问题。你的程序已经写得很好。

但你可以做成树结构,列出所有文件和目录跟踪一下。
并在文件名左右加上[],以防止空格的情况。

或者如果在该目录下该找到的文件没找到,把这个目录下的文件名全部列出来。
跟踪AnsiCompareText的结果并看看有没有空格。

你能不能把问题描述得具体一点,因为我的机器环境和你的不一样。
我无法测试。
 
jsxjd,谢谢你写了这么多!问题的原因我已经找到了
因为我要在所有的硬盘分区中查找,所以程序是这样写的
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
sDrive : Pchar;
s : TStringList;
ThePath : string;
begin
Screen.Cursor := crHourGlass;
Panel1.Caption := '正在检测系统安装路径,可能需要几分钟时间,请稍候...';
form1.Repaint;
s := TStringList.Create;
for i := 0 to DriveComboBox1.Items.Count - 1 do
begin
sDrive := Pchar(copy(DriveComboBox1.Items,1,2));
if GetDriveType(sDrive) = DRIVE_FIXED then
begin
s := MySearchFile('SchoolInfoSystem.exe',sDrive,true,true);
if s.Count <> 0 then
break;
end;
end;
......后面是一些不相关的代码
安装程序是装在C区的,根据我刚才得出结果GetDriveType('C:')=1而不等于3
所以程序跳过C区,只查询E,F区,所以才出现查找不到的现象!
现在的问题为什么在那台机GetDriveType('C:')是等于1呢?
 
这应该是 Windows 区分是否是系统盘的一种方式。

1 DRIVE_NO_ROOT_DIR Root directory does not exist.
解释是“没有根目录”。
 
jsxjd,谢谢你!已经行了,只要GetDriveType('C:/')就会等于3了!哎。。。
 
后退
顶部