如何检查某个驱动器是否可用?

天地之灵 2001-01-22 03:21:00
如下代码:
FILE *fp=fopen("a:\\test.c","r");
if(!fp) puts("File not found");
当已插入软盘时程序运行正常。
但若未插入软盘,则显示
"
Not ready reading drive A
Abort,Retry,Fail?
"
按A后程序终止,puts语句未执行。
是否可以检查某个驱动器是否可用或者其它办法避免以上情况?
...全文
112 点赞 收藏 6
写回复
6 条回复
hyqryq 2001年01月23日
由于程序在DOS系统下处理,当程序出错后将由DOS中断来处理这种异常.
这个问题比较头疼,必须修改DOS中断.

具体可以在程序中内嵌汇编,照SAsura(SAsura) 的方法作即可.
回复 点赞
SAsura 2001年01月23日
给你介绍两种可行的方法:
1)调用int13h磁盘中断调用,格式如下:
入口参数:
AH=02H
AL=传送的扇区数
ES:BX=用户的I/O缓冲区地址:偏移
CH:磁道号
CL:扇区号
DH:磁头号
DL:驱动器号(0=A,1=B)
出口参数:
成功:清进位标志位
AH=0
AL=实际传送的扇区数
失败:置进位标志位
AH=状态字节


调用时可置:
AX=0201H,CX=0001H,DX=0000(A盘)或DX=0001(B盘)
此参数读入软盘主引导扇区。
返回时:
成功:AX=0001H (证明有盘)
失败:AX=8000H (没盘,其中高8位为错误码,不一定是80)

2)修改int24h严重错误处理
自己截获这个中断,将他指向自己的中断处理程序,此中断处理程序中不要作任何处理,直接返回即可。这样处理后软驱没有盘时不会提示用户,会向程序直接返回错误码,程序结束后不用恢复此中断地址,DOS会自动恢复。
回复 点赞
nemo2050 2001年01月23日
我这儿有一个MSDN中的例程, 希望对你有所帮助。

/* GETDRIVE.C illustrates drive functions including:
* _getdrive _chdrive _getdcwd
*/

#include <stdio.h>
#include <conio.h>
#include <direct.h>
#include <stdlib.h>
#include <ctype.h>

void main( void )
{
int ch, drive, curdrive;
static char path[_MAX_PATH];

/* Save current drive. */
curdrive = _getdrive();

printf( "Available drives are: \n" );

/* If we can switch to the drive, it exists. */
for( drive = 1; drive <= 26; drive++ )
if( !_chdrive( drive ) )
printf( "%c: ", drive + 'A' - 1 );

while( 1 )
{
printf( "\nType drive letter to check or ESC to quit: " );
ch = _getch();
if( ch == 27 )
break;
if( isalpha( ch ) )
_putch( ch );
if( _getdcwd( toupper( ch ) - 'A' + 1, path, _MAX_PATH ) != NULL )
printf( "\nCurrent directory on that drive is %s\n", path );
}

/* Restore original drive.*/
_chdrive( curdrive );
printf( "\n" );
}
回复 点赞
nemo2050 2001年01月23日
关注
回复 点赞
天地之灵 2001年01月23日
兄台您可否具体点,我手头上找不到这类资料
回复 点赞
SAsura 2001年01月22日
调用int13磁盘中断,软驱中没有盘时不会出现上面的提示,根据返回的错误码判断是否有盘。
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告