Board logo

标题: 如何编程获取大硬盘的剩余空间 [打印本页]

作者: kaixin11     时间: 2005-2-18 00:00    标题: 如何编程获取大硬盘的剩余空间

各位大侠:
  请问如何在DOS环境下编程实现获取硬盘的剩余空间,在整个分区大小小于2G的情况下我已实现,但不知道如何处理现在流行的大硬盘,请各位高手不吝指教。
  多谢!
作者: crshen     时间: 2005-2-18 00:00
不知道你用什么语言另外能不能说一下你用什么方法实现小分区中获取剩余空间

作者: JonePeng     时间: 2005-2-19 00:00
用int 21H的36H子功能可以获取剩余空间。输入值:AX=36H,DL=驱动器号(A=1,B=2,C=3……)返回值:AX=每簇扇区数,BX=剩余簇数,CX=每扇区字节数。剩余容量=AX*BX*CX
作者: crshen     时间: 2005-2-19 00:00
AX*BX*CX,这种方法不行,CX为0x200,BX最大0xFFFF,AX为簇,常为8/16/32扇区等,限制为2G,可能就是kaixin11的方法。
作者: qb45     时间: 2005-2-20 00:00
简单的可以调用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编辑过]



作者: kaixin11     时间: 2005-2-24 00:00
呵呵,我用的是c语言,最开始的时候调用bc++的函数,在小硬盘的时候可以,后来用int 21h的功能36h,但受2G限制,现在用WATCOM C++,看资料说还是用int 21h的功能36h,返回数值放在eax,ebx,ecx,edx中,试了一下,还是不行。qb45说的方法还没试过,我会试试看。呵呵现在用了个笨办法,用dir命令将磁盘信息写到文本文件中,然后从文本文件中取出信息。
作者: bush     时间: 2005-2-25 00:00
dir?呵呵,有創意!
作者: bush     时间: 2005-2-25 00:00
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 );

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