曲径通幽论坛

标题: 查找文件 [打印本页]

作者: easy    时间: 2013-2-21 12:07
标题: 查找文件
查找文件()命令用来查找磁盘上的文件,位于核心支持库的磁盘操作库中,其说明如下:
    调用格式: 〈文本型〉 寻找文件 ([文本型 欲寻找的文件或目录名称],[整数型 欲寻找文件的属性]) - 系统核心支持库->磁盘操作
    英文名称:dir
    返回一个文本,用以表示所找到的文件名或目录名,它必须与所要求的名称格式或文件属性相匹配。支持使用多字符 (*) 和单字符 (?) 通配符来指定多重文件。在某子程序中第一次调用本命令时,必须指定“欲寻找文件”参数,否则将返回空文本 (“”)。在第一次调用以后如果想得到其它匹配的文件名,再一次调用本命令,且不要提供欲寻找文件名参数。如果已没有合乎条件的文件,本命令会返回一个空文本。一旦返回值为空文本,要再次调用本命令时,就必须指定“欲寻找文件”参数。不必访问完所有当前匹配的文件名,就可以使用一个新的“欲寻找文件”进行新的寻找。本命令为初级命令。
    参数<1>的名称为“欲寻找的文件或目录名称”,类型为“文本型(text)”,可以被省略。可以使用多字符 (*) 和单字符 (?) 通配符来指定多重文件。在非首次寻找文件时,参数值必须为空或被省略。
    参数<2>的名称为“欲寻找文件的属性”,类型为“整数型(int)”,可以被省略。参数值可以为以下常量值或其和: 1、#只读文件; 2、#隐藏文件; 4、#系统文件; 16、#子目录; 32、#存档文件 。通过将这些常量值加起来可以一次设置多个文件属性。如果省略本参数,默认为搜寻除子目录外的所有文件。

下面的例子通过查找某一目录下(包括子目录)某一类型的文件(这里仅演示查找 .txt 文件)来说明该命令的用法。
首先设计的程序窗口为:
[attach]1338[/attach]
第一个为编辑框,供用户输入要查找的目录;第二个为一个标签,用来即时显示查找到的文件情况;第三个为一个选择列表框,用来存储查找到的文件名(比如一些播放器软件,往往内置这样一个选择列表框);第四个为一个按钮,当按下时,开始寻找指定的目录。

程序代码如下:
[attach]1339[/attach]
搜索文件的核心命令正是“查找文件()”命令,由于该命令没有提供直接的子目录查找功能,因此对于子目录的搜索,在程序中使用了递归算法。下面分析一下程序:

当按下“开始查找”按钮时,调用自定义的 Find() 函数,该函数只有一个参数,该参数指定一个目录,开始时从编辑框里获得。按照用户的输入习惯,他们不一定会输入目录的完整形式,比如:B:\FindMe\ ,即他们往往会遗漏掉目录字串中最后一个 "\" 符号,因此在程序的一开始我们要帮助补足这一行为。

接着,开始搜索指定目录下是否存在 *.txt 这类型的文件,如果“查找文件()”命令返回的结果不为空,那么说明找到相应的文件;找到时,我们不但用标签来即时显示这个结果,还将结果添加到选择列表框中。正如命令说明中所说的那样,“查找命令”在首次查找时需要指定第一个参数,当再次查找时就不需要再指定了,正如判断循环首里所示。

当查找完父目录里的文件后,就要处理各个子目录里的文件里。由于子目录又含有子目录,所以使用递归的方法查找是较为合适的。这里需要注意的是,有两个隐藏目录,一个是代表本层目录的 "." 和上层目录的 "..",这个要做下过滤。

查找文件命令的第二个参数指定了查找文件的属性,比如上面指定的“#子目录”。

程序运行效果如下:
[attach]1340[/attach]




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2