我正在尝试检查驱动器A中是否存在任何磁盘:(在我的程序安装后,我需要确保计算机不会从安装软盘启动(。我尝试使用_access方法(未定义的引用...(,FILE*并在软盘内创建目录,并在检查后将其删除。不幸的是,DOS显示了关于将磁盘放入驱动器的丑陋文本(破坏我的TUI并让用户认为驱动器中的软盘很重要(。那么如何抑制此消息,或安全地检查驱动器中是否存在磁盘?
可能是 BIOS INT 13H 16H:检测介质更改 - 它有一个状态:
80H = diskette drive not ready or not installed
这可能会解决您的问题 - 我缺乏亲自测试它的古董硬件和软件。
#include <dos.h>
unsigned int DetectMediaChange()
{
union REGS regs;
regs.h.ah = 0x16; // Detect Media Change
regs.h.dl = 0; // Drive A
int86( 0x13, ®s, ®s ); // BIOS Disk I/O INT 13h
return regs.h.ah ; // Status : 00H = diskette change line not active
// 01H = invalid drive number
// 06H = either change line is not supported or
// disk change line is active (media was swapped)
// 80H = diskette drive not ready or not installed
// else= BIOS disk error code if CF is set to CY
}
好的,我已经想通了:
char far * bufptr;
union REGS inregs, outregs;
struct SREGS segregs;
char buf [1024];
avaliable(){
redo:
segread(&segregs);
bufptr = (char far *) buf;
segregs.es = FP_SEG(bufptr);
inregs.x.bx = FP_OFF(bufptr);
inregs.h.ah = 2;
inregs.h.al = 1;
inregs.h.ch = 0;
inregs.h.cl = 1;
inregs.h.dh = 0;
inregs.h.dl = 0;
int86x(0x13, &inregs, &outregs, &segregs);
return outregs.x.cflag;
}
如果磁盘在驱动器中,则返回 true。