中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-01 12:18
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 如何编程获取大硬盘的剩余空间 查看 1,208 回复 8
楼 主 如何编程获取大硬盘的剩余空间 发表于 2005-02-18 00:00 ·  中国 河南 洛阳 联通
初级用户
积分 122
发帖 5
注册 2005-02-18 00:00
21年会员
UID 36284
性别 男
状态 离线
各位大侠:
  请问如何在DOS环境下编程实现获取硬盘的剩余空间,在整个分区大小小于2G的情况下我已实现,但不知道如何处理现在流行的大硬盘,请各位高手不吝指教。
  多谢!
2 发表于 2005-02-18 00:00 ·  中国 浙江 台州 椒江区 电信
中级用户
★★
积分 447
发帖 126
注册 2004-02-10 00:00
22年会员
UID 17150
性别 男
状态 离线
不知道你用什么语言另外能不能说一下你用什么方法实现小分区中获取剩余空间
从来不用别人的东西,要用,也先改成自己的再说!
3 发表于 2005-02-19 00:00 ·  中国 广东 广州 白云区 电信
金牌会员
★★★★
D◎$ Fαп
积分 4,562
发帖 1,883
注册 2004-01-19 00:00
22年会员
UID 15812
性别 男
来自 广东广州
状态 离线
用int 21H的36H子功能可以获取剩余空间。输入值:AX=36H,DL=驱动器号(A=1,B=2,C=3……)返回值:AX=每簇扇区数,BX=剩余簇数,CX=每扇区字节数。剩余容量=AX*BX*CX
----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
4 发表于 2005-02-19 00:00 ·  中国 浙江 台州 椒江区 电信
中级用户
★★
积分 447
发帖 126
注册 2004-02-10 00:00
22年会员
UID 17150
性别 男
状态 离线
AX*BX*CX,这种方法不行,CX为0x200,BX最大0xFFFF,AX为簇,常为8/16/32扇区等,限制为2G,可能就是kaixin11的方法。
从来不用别人的东西,要用,也先改成自己的再说!
5 发表于 2005-02-20 00:00 ·  中国 湖北 宜昌 电信
高级用户
★★
积分 677
发帖 194
注册 2003-09-13 00:00
22年会员
UID 9778
性别 男
状态 离线
简单的可以调用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 发表于 2005-02-24 00:00 ·  中国 河南 洛阳 联通
初级用户
积分 122
发帖 5
注册 2005-02-18 00:00
21年会员
UID 36284
性别 男
状态 离线
呵呵,我用的是c语言,最开始的时候调用bc++的函数,在小硬盘的时候可以,后来用int 21h的功能36h,但受2G限制,现在用WATCOM C++,看资料说还是用int 21h的功能36h,返回数值放在eax,ebx,ecx,edx中,试了一下,还是不行。qb45说的方法还没试过,我会试试看。呵呵现在用了个笨办法,用dir命令将磁盘信息写到文本文件中,然后从文本文件中取出信息。
7 发表于 2005-02-25 00:00 ·  中国 重庆 渝中区 电信
银牌会员
★★★
积分 2,165
发帖 730
注册 2004-04-21 00:00
22年会员
UID 22966
性别 男
状态 离线
dir?呵呵,有創意!
8 发表于 2005-02-25 00:00 ·  中国 重庆 渝中区 电信
银牌会员
★★★
积分 2,165
发帖 730
注册 2004-04-21 00:00
22年会员
UID 22966
性别 男
状态 离线
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 发表于 2005-02-28 00:00 ·  中国 河南 洛阳 联通
初级用户
积分 122
发帖 5
注册 2005-02-18 00:00
21年会员
UID 36284
性别 男
状态 离线
呵呵,虽然TC和WATCOM C中都有库函数,但是它们都受2G空间大小限制,对现在的大硬盘都没有用。难啊
论坛跳转: