中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-31 16:24
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行
DOS开发编程 & 发展交流 (开发室) » 如何编程获取大硬盘的剩余空间
可打印版本  1,310 / 8
第1楼 kaixin11 发表于 2005-02-18 00:00
初级用户 发帖 5 积分 122
如何编程获取大硬盘的剩余空间
各位大侠:
  请问如何在DOS环境下编程实现获取硬盘的剩余空间,在整个分区大小小于2G的情况下我已实现,但不知道如何处理现在流行的大硬盘,请各位高手不吝指教。
  多谢!
第2楼 crshen 发表于 2005-02-18 00:00
中级用户 发帖 126 积分 447
不知道你用什么语言另外能不能说一下你用什么方法实现小分区中获取剩余空间
第3楼 JonePeng 发表于 2005-02-19 00:00
金牌会员 发帖 1,883 积分 4,562 来自 广东广州
用int 21H的36H子功能可以获取剩余空间。输入值:AX=36H,DL=驱动器号(A=1,B=2,C=3……)返回值:AX=每簇扇区数,BX=剩余簇数,CX=每扇区字节数。剩余容量=AX*BX*CX
第4楼 crshen 发表于 2005-02-19 00:00
中级用户 发帖 126 积分 447
AX*BX*CX,这种方法不行,CX为0x200,BX最大0xFFFF,AX为簇,常为8/16/32扇区等,限制为2G,可能就是kaixin11的方法。
第5楼 qb45 发表于 2005-02-20 00:00
高级用户 发帖 194 积分 677
简单的可以调用INT21的相应功能
AX = 7303h
DSX -> ASCIZ string for drive ("C:\" or "\\SERVER\Share"
ESI -> buffer for extended free space structure
CX = length of buffer for extended free space
这个是扩展INT21号中断调用!
复杂一些的可以用INT13来读出FAT,然后在程序里分析处理!这种方法可以不受操作系统的局限
也不知道你用什么语言编程,我用的是QBASIC,如果你也是用QB来做开发,请到http://qbdos.51.net/cgi-bin/bbs/
本网站不欢迎为了做书上的题目来请人做枪手的网友,见贴必删勿论!!!!!!
第6楼 kaixin11 发表于 2005-02-24 00:00
初级用户 发帖 5 积分 122
呵呵,我用的是c语言,最开始的时候调用bc++的函数,在小硬盘的时候可以,后来用int 21h的功能36h,但受2G限制,现在用WATCOM C++,看资料说还是用int 21h的功能36h,返回数值放在eax,ebx,ecx,edx中,试了一下,还是不行。qb45说的方法还没试过,我会试试看。呵呵现在用了个笨办法,用dir命令将磁盘信息写到文本文件中,然后从文本文件中取出信息。
第7楼 bush 发表于 2005-02-25 00:00
银牌会员 发帖 730 积分 2,165
dir?呵呵,有創意!
第8楼 bush 发表于 2005-02-25 00:00
银牌会员 发帖 730 积分 2,165
TC DOS.Hvoid getfat(unsigned char drive,
struct fatinfo *dtable);
void getdfree(unsigned char drive,
struct dfree *dtable);WATCOM 好像有:dos_getdiskfree( unsigned __drive,
struct _diskfree_t *__diskspace );
getdiskfree( unsigned __drive,
struct _diskfree_t *__diskspace );
第9楼 kaixin11 发表于 2005-02-28 00:00
初级用户 发帖 5 积分 122
呵呵,虽然TC和WATCOM C中都有库函数,但是它们都受2G空间大小限制,对现在的大硬盘都没有用。难啊
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023