中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 如何编程获取大硬盘的剩余空间
作者:
标题: 如何编程获取大硬盘的剩余空间 上一主题 | 下一主题
kaixin11
初级用户




积分 122
发帖 5
注册 2005-2-18
状态 离线
『楼 主』:  如何编程获取大硬盘的剩余空间

各位大侠:
  请问如何在DOS环境下编程实现获取硬盘的剩余空间,在整个分区大小小于2G的情况下我已实现,但不知道如何处理现在流行的大硬盘,请各位高手不吝指教。
  多谢!

2005-2-18 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 2 楼』:  

不知道你用什么语言另外能不能说一下你用什么方法实现小分区中获取剩余空间




从来不用别人的东西,要用,也先改成自己的再说!
2005-2-18 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 3 楼』:  

用int 21H的36H子功能可以获取剩余空间。输入值:AX=36H,DL=驱动器号(A=1,B=2,C=3……)返回值:AX=每簇扇区数,BX=剩余簇数,CX=每扇区字节数。剩余容量=AX*BX*CX



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-2-19 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
crshen
中级用户




积分 447
发帖 126
注册 2004-2-10
状态 离线
『第 4 楼』:  

AX*BX*CX,这种方法不行,CX为0x200,BX最大0xFFFF,AX为簇,常为8/16/32扇区等,限制为2G,可能就是kaixin11的方法。



从来不用别人的东西,要用,也先改成自己的再说!
2005-2-19 00:00
查看资料  发送邮件  发短消息 网志  OICQ (67154440)  编辑帖子  回复  引用回复
qb45
高级用户




积分 677
发帖 194
注册 2003-9-13
状态 离线
『第 5 楼』:  

简单的可以调用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/   
本网站不欢迎为了做书上的题目来请人做枪手的网友,见贴必删勿论!!!!!!

[此贴子已经被作者于2005-3-1 9:11:52编辑过]






我(QB45)的照片与简历
http://www.programfan.com/club/showbbs.asp?id=197280
2005-2-20 00:00
查看资料  发送邮件  发短消息 网志  OICQ (406930019)  编辑帖子  回复  引用回复
kaixin11
初级用户




积分 122
发帖 5
注册 2005-2-18
状态 离线
『第 6 楼』:  

呵呵,我用的是c语言,最开始的时候调用bc++的函数,在小硬盘的时候可以,后来用int 21h的功能36h,但受2G限制,现在用WATCOM C++,看资料说还是用int 21h的功能36h,返回数值放在eax,ebx,ecx,edx中,试了一下,还是不行。qb45说的方法还没试过,我会试试看。呵呵现在用了个笨办法,用dir命令将磁盘信息写到文本文件中,然后从文本文件中取出信息。

2005-2-24 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 7 楼』:  

dir?呵呵,有創意!

2005-2-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 8 楼』:  

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 );


2005-2-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kaixin11
初级用户




积分 122
发帖 5
注册 2005-2-18
状态 离线
『第 9 楼』:  

呵呵,虽然TC和WATCOM C中都有库函数,但是它们都受2G空间大小限制,对现在的大硬盘都没有用。难啊

2005-2-28 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: