回 帖 发 新 帖 刷新版面

主题:问:如何取得文件的修改时间

DOS下dir时,可以看到文件的最后一次修改时间,Qbasic里不调用shell "dir",怎样才能得到某一文件的最后一次修改时间.[em6]

回复列表 (共4个回复)

沙发

DOS功能调用
BIOS功能调用
如果是我,一定会用SHELL

板凳

不是我不用shell,我的意思是,我不想用shell "dir",因为这样会在屏幕上显出一大串东西,如果能用shell,后台执行,取得文件修改时间也可以啊,但怎么实现呢?还有,上面说的DOS或BIOS调用能不能举例一下,谢谢啦!

3 楼

中断功能调用请搜索QB45发的贴:关键字“中断”

shell "dir abc.txt/s > DIR1.txt"

4 楼

'本程序运行环境: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

我来回复

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