主题:问:如何取得文件的修改时间
lqmking
[专家分:30] 发布于 2006-11-11 22:34:00
DOS下dir时,可以看到文件的最后一次修改时间,Qbasic里不调用shell "dir",怎样才能得到某一文件的最后一次修改时间.[em6]
回复列表 (共4个回复)
沙发
moz [专家分:37620] 发布于 2006-11-11 23:16:00
DOS功能调用
BIOS功能调用
如果是我,一定会用SHELL
板凳
lqmking [专家分:30] 发布于 2006-11-12 10:30:00
不是我不用shell,我的意思是,我不想用shell "dir",因为这样会在屏幕上显出一大串东西,如果能用shell,后台执行,取得文件修改时间也可以啊,但怎么实现呢?还有,上面说的DOS或BIOS调用能不能举例一下,谢谢啦!
3 楼
moz [专家分:37620] 发布于 2006-11-12 21:59:00
中断功能调用请搜索QB45发的贴:关键字“中断”
shell "dir abc.txt/s > DIR1.txt"
4 楼
qb45 [专家分:2880] 发布于 2006-11-20 10:40:00
'本程序运行环境:winxp,98,DOS ,用的是qb4.5版本
'使用方法,启动QB时加参数/L , 如: QB/L
DECLARE SUB FileInfo (File AS ANY)
DECLARE SUB SetFileDta ()
DECLARE FUNCTION FindFirstFile% (FileName$, FileAttrib%)
DECLARE FUNCTION FindNextFile% ()
COMMON SHARED FileDta$ '设置缓冲区为全局共享
TYPE FileRecord '自定义文件信息的数据类型
Attrib AS INTEGER
hour AS INTEGER
min AS INTEGER
sec AS INTEGER
Day AS INTEGER
Year AS INTEGER
Month AS INTEGER
size AS LONG
DosName AS STRING * 12
END TYPE
CLS
SHELL "dir *.*" '调用dos的DIR命令查看文件信息
'----下面的程序能和DIR命令一样查看信息,可以与DIR命令得到的信息比较一下
DIM File AS FileRecord '定义FILE为自定义数据类型
FileName$ = "*.*"
IF FindFirstFile%(FileName$, FileAttrib%) = 1 THEN
PRINT "NO FILE "
END '开始查找第一个文件,如果没有则终止
ELSE
'如果找到一个,则继续读出所有 按文件名,大小,年月日...排列
DO
FileInfo File
PRINT File.DosName, File.size, File.Year; File.Month; File.Day; File.hour; File.min
LOOP WHILE FindNextFile% = 0
END IF
'Changes current drive.
SUB FileInfo (File AS FileRecord)
'从缓冲区读出文件信息
Find% = INSTR(31, FileDta$, CHR$(0)) - 31
File.DosName$ = MID$(FileDta$, 31, Find% + 1)
File.size = CVL(MID$(FileDta$, &H1B, 4))
FileDate% = CVI(MID$(FileDta$, &H19, 2))
FileTime% = CVI(MID$(FileDta$, &H17, 2))
File.Attrib = ASC(MID$(FileDta$, &H16, 1))
File.hour% = (FileTime% AND &HF800) \ &H800 AND &H1F
File.min% = (FileTime% AND &HFFE0) \ &H20 AND &H3F
File.sec% = FileTime% AND &H1F
File.Day% = FileDate% AND &H1F
File.Month% = (FileDate% \ &H20) AND &HF
File.Year% = FileDate% \ &H200 + 1980
END SUB
FUNCTION FindFirstFile% (FileName$, FileAttrib%)
'查找第一个文件:入口AH=4E CX=属性 DS:DX=文件名 返回AX=错误码
SetFileDta
FileName$ = FileName$ + CHR$(0)
DIM Reg%(9)
Reg%(0) = &H4E00
Reg%(8) = VARSEG(FileName$)
Reg%(3) = SADD(FileName$)
Reg%(2) = FileAttrib%
CALL INT86XOLD(&H21, Reg%(), Reg%())
FindFirstFile% = Reg%(7) AND 1
END FUNCTION
FUNCTION FindNextFile%
'查找成功根据调用查找下一个文件 入口AH=4F DS:DX=文件名,返回AX=错误码
DIM Reg%(9)
Reg%(0) = &H4F00
CALL INT86XOLD(&H21, Reg%(), Reg%())
FindNextFile% = Reg%(7) AND 1
END FUNCTION
SUB SetFileDta
'设置DTA:入口AH=1A DX:DX=缓冲区(32)
FileDta$ = STRING$(43, CHR$(0))
DIM Reg%(9)
Reg%(0) = &H1A00
Reg%(8) = VARSEG(FileDta$)
Reg%(3) = SADD(FileDta$)
CALL INT86XOLD(&H21, Reg%(), Reg%())
END SUB
我来回复