回 帖 发 新 帖 刷新版面

主题:如何取得文件夹内所有的文档名

[em18]
各位:
    如果我要取得一个文件夹内所有文档格式的文件名,该用哪个命令?看qb45里面的帮助好象都没有这个命令

回复列表 (共10个回复)

沙发

使用Quick Basic7.1版本时有DIR$函数

如果是4.5版本,请查阅QB71有关文件名的贴子

板凳

反正 QB 也是依赖 DOS 而存在的
如果是我,会使用 SHELL "DIR>文件名"
更方便快捷.
当然,如果你的内存站了太多常驻程序就难保不出错了.
编译后一般没什么问题的,
在QB环境内运行SHELL的话,
就需要一些外挂SHELL工具来处理内存数据的读写了.

3 楼

我想做的是把文件夹内的文档名转化成QB程序里面的变量,不知道该怎么做?

4 楼

1.  如果是QB7.1的话:
    第一次要文件名的时候 A$=DIR$("*.*")  星号是统配符,可以用其他文件名代替
    之后其他文件名       A$=DIR$

2.  如果是低版本用DOS中断
    参考一下置顶的中断例程
    一是不容易实现,二是容易出错,三是容易死机,四是速度极慢

3.  如果用SHELL把DIR结果定重向到文件去
    把这个文件打开,根据不同的DOS控制台的DIR不同的格式读入文件内容
    判断哪些字符是文件名,把它赋值予字符串变量就可以了
    个人而言比较喜欢这种方式,方便快捷,不易出错.

5 楼

用shell dir >的重定向方法搞定了,谢qb71和moz两位

6 楼

反对Moz说法:

第2点:"一是不容易实现,二是容易出错,三是容易死机,四是速度极慢"
一.并不难实现,而且可说是容易,我和QB45的贴子都有写好的函数,用法和7.1版本的DIR$一样.
二.我反复的测试过,不会出错
三.我从未发现过因为这个函数死过机
四.速度不比你用第3点的用法慢

第3点:"用SHELL把DIR结果定重向到文件去"
此法不可取,比如你的程序放在光盘上或磁盘空间不足或磁盘拒绝写入

说明一下,用函数的方法就是内存的问题,但如果用SHELL的方法可取
当内存不够时你同样可以反文件名缓存到其他位置

7 楼


你好moz! 好厉害你,什么都会,我出学的  总看你们说"中断"这个词,请问是什么意思,在什么书里能了解有关知识呢?

8 楼

楼上差矣,
我什么都不会,
我连中断都不会,
且极少极少使用。

书上有中断的解释,
但这些大概都是比较久远的历史知识了。
中断,跟函数差不多意思,
是硬件或操作系统或软件中既有的功能,你拿出来利用一下就可以了,
比如说你要从深圳到北京,
有一号中断(火车),二号中断(飞机),三号中断(汽车),四号中断(轮船)
哪号中断能用?有效?高效?快速?方便? 你选择好了,
根据这号中断的要求,去买票,接受检查,按时上车就对了。

以前普遍有BIOS中断,是硬件的主板里提供的一些对硬件数据传输操作的功能调用。
后来在DOS里,有DOS操作系统的核心功能调用的DOS中断,
现在到了Windows,因为功能函数太多了,所以现在已经发展成API调用了。

其实我半桶水都没有,只是在这里瞎吹的,很多知识,需要你自己去学习领会。

9 楼

如果,
我是说如果,你安装的是QuickBasic4.5的完整版。你会发现。你要这些功能它自带的例子都有。

10 楼

给一段QB自带的程序做做参考。
   ' ************************************************
  ' **  Name:          FILEINFO                   **
  ' **  Type:          Toolbox                    **
  ' **  Module:        FILEINFO.BAS               **
  ' **  Language:      Microsoft QuickBASIC 4.00  **
  ' ************************************************
  '
  ' Collection of subprograms and functions for accessing
  ' directory information about files.
  '
  ' USAGE:           No command line parameters
  ' REQUIREMENTS:    MIXED.QLB/.LIB
  ' .MAK FILE:       (none)
  ' PARAMETERS:      (none)
  ' VARIABLES:       path$      Path to files for gathering directory
  '                             information; wildcard characters accepted
  '                  dta$       Disk transfer area buffer string
  '                  result%    Code returned as result of directory search
  '                  file       Structure of type FileDataType
  '                  n%         File count
  
  ' File search attribute bits
    CONST ISNORMAL = 0
    CONST ISREADONLY = 1
    CONST ISHIDDEN = 2
    CONST ISSYSTEM = 4
    CONST ISVOLUMELABEL = 8
    CONST ISSUBDIRECTORY = 16
    CONST ISARCHIVED = 32
  
  ' Here we'll search for normal files and subdirectories
    CONST FILEATTRIBUTE = ISNORMAL + ISSUBDIRECTORY
  
    TYPE RegTypeX
        ax    AS INTEGER
        bx    AS INTEGER
        cx    AS INTEGER
        dx    AS INTEGER
        bp    AS INTEGER
        si    AS INTEGER
        di    AS INTEGER
        flags AS INTEGER
        ds    AS INTEGER
        es    AS INTEGER
    END TYPE
  
    TYPE FileDataType
        finame    AS STRING * 12
        year      AS INTEGER
        month     AS INTEGER
        day       AS INTEGER
        hour      AS INTEGER
        minute    AS INTEGER
        second    AS INTEGER
        attribute AS INTEGER
        size      AS LONG
    END TYPE
  
  ' Subprograms
    DECLARE SUB INTERRUPTX (intnum%, inreg AS RegTypeX, outreg AS RegTypeX)
    DECLARE SUB FindFirstFile (path$, dta$, result%)
    DECLARE SUB FindNextFile (dta$, result%)
    DECLARE SUB GetFileData (dta$, file AS FileDataType)
  
  ' Data structures
    DIM file AS FileDataType
  
  ' For demonstration purposes, list current directory
    CLS
    path$ = "*.*"
  
  ' Always start by finding the first match
    FindFirstFile path$, dta$, result%
  
  ' Check that the path$ got us off to a good start
    IF result% THEN
        PRINT "Error: FindFirstFile - found no match for path$"
        SYSTEM
    END IF
  
  ' List all the files in this directory
    DO
        IF n% MOD 19 = 0 THEN
            CLS
            PRINT TAB(4); "File"; TAB(18); "Date"; TAB(29); "Time";
            PRINT TAB(39); "Size"; TAB(48); "Attributes"
            PRINT
        END IF
        GetFileData dta$, file
        PRINT file.finame;
        PRINT USING "  ##/##/####"; file.month; file.day; file.year;
        PRINT USING "  ##:##:##"; file.hour; file.minute; file.second;
        PRINT USING "  ########"; file.size;
        PRINT SPACE$(6);
        PRINT "&H";
        PRINT RIGHT$("0" + HEX$(file.attribute), 2)
        n% = n% + 1
        FindNextFile dta$, result%
        IF n% MOD 19 = 0 THEN
            PRINT
            PRINT "Press any key to continue"
            DO
            LOOP WHILE INKEY$ = ""
        END IF
    LOOP UNTIL result%
    PRINT
    PRINT n%; "files found"

我来回复

您尚未登录,请登录后再回复。点此登录或注册