主题:如何取得文件夹内所有的文档名
qbtianzu
[专家分:0] 发布于 2005-11-25 15:03:00
[em18]
各位:
如果我要取得一个文件夹内所有文档格式的文件名,该用哪个命令?看qb45里面的帮助好象都没有这个命令
回复列表 (共10个回复)
沙发
QB71 [专家分:1300] 发布于 2005-11-25 19:05:00
使用Quick Basic7.1版本时有DIR$函数
如果是4.5版本,请查阅QB71有关文件名的贴子
板凳
moz [专家分:37620] 发布于 2005-11-25 20:22:00
反正 QB 也是依赖 DOS 而存在的
如果是我,会使用 SHELL "DIR>文件名"
更方便快捷.
当然,如果你的内存站了太多常驻程序就难保不出错了.
编译后一般没什么问题的,
在QB环境内运行SHELL的话,
就需要一些外挂SHELL工具来处理内存数据的读写了.
3 楼
qbtianzu [专家分:0] 发布于 2005-11-26 21:10:00
我想做的是把文件夹内的文档名转化成QB程序里面的变量,不知道该怎么做?
4 楼
moz [专家分:37620] 发布于 2005-11-26 23:50:00
1. 如果是QB7.1的话:
第一次要文件名的时候 A$=DIR$("*.*") 星号是统配符,可以用其他文件名代替
之后其他文件名 A$=DIR$
2. 如果是低版本用DOS中断
参考一下置顶的中断例程
一是不容易实现,二是容易出错,三是容易死机,四是速度极慢
3. 如果用SHELL把DIR结果定重向到文件去
把这个文件打开,根据不同的DOS控制台的DIR不同的格式读入文件内容
判断哪些字符是文件名,把它赋值予字符串变量就可以了
个人而言比较喜欢这种方式,方便快捷,不易出错.
5 楼
qbtianzu [专家分:0] 发布于 2005-11-27 20:14:00
用shell dir >的重定向方法搞定了,谢qb71和moz两位
6 楼
QB71 [专家分:1300] 发布于 2005-11-28 20:27:00
反对Moz说法:
第2点:"一是不容易实现,二是容易出错,三是容易死机,四是速度极慢"
一.并不难实现,而且可说是容易,我和QB45的贴子都有写好的函数,用法和7.1版本的DIR$一样.
二.我反复的测试过,不会出错
三.我从未发现过因为这个函数死过机
四.速度不比你用第3点的用法慢
第3点:"用SHELL把DIR结果定重向到文件去"
此法不可取,比如你的程序放在光盘上或磁盘空间不足或磁盘拒绝写入
说明一下,用函数的方法就是内存的问题,但如果用SHELL的方法可取
当内存不够时你同样可以反文件名缓存到其他位置
7 楼
salutsun [专家分:0] 发布于 2008-04-12 07:35:00
你好moz! 好厉害你,什么都会,我出学的 总看你们说"中断"这个词,请问是什么意思,在什么书里能了解有关知识呢?
8 楼
moz [专家分:37620] 发布于 2008-04-12 13:56:00
楼上差矣,
我什么都不会,
我连中断都不会,
且极少极少使用。
书上有中断的解释,
但这些大概都是比较久远的历史知识了。
中断,跟函数差不多意思,
是硬件或操作系统或软件中既有的功能,你拿出来利用一下就可以了,
比如说你要从深圳到北京,
有一号中断(火车),二号中断(飞机),三号中断(汽车),四号中断(轮船)
哪号中断能用?有效?高效?快速?方便? 你选择好了,
根据这号中断的要求,去买票,接受检查,按时上车就对了。
以前普遍有BIOS中断,是硬件的主板里提供的一些对硬件数据传输操作的功能调用。
后来在DOS里,有DOS操作系统的核心功能调用的DOS中断,
现在到了Windows,因为功能函数太多了,所以现在已经发展成API调用了。
其实我半桶水都没有,只是在这里瞎吹的,很多知识,需要你自己去学习领会。
9 楼
冷石_jasv [专家分:1570] 发布于 2008-04-24 20:26:00
如果,
我是说如果,你安装的是QuickBasic4.5的完整版。你会发现。你要这些功能它自带的例子都有。
10 楼
冷石_jasv [专家分:1570] 发布于 2008-04-26 13:46:00
给一段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"
我来回复