我尝试使用DriveInfo.IsReady,但如果驱动器中有未格式化的软盘,则返回false。
答案 0 :(得分:3)
您总是可以尝试从软盘中读取扇区,看看它是否成功。
我不知道如何在.NET中做到这一点,但这里是C / C ++的等价物。
SetLastError(0);
HANDLE h = CreateFile("\\\\.\\A:", ...);
if (!ReadFile(h, buf, 512, &bytes_read, 0))
{
DWORD err = GetLastError();
}
答案 1 :(得分:1)
简单地说:你做不到。软盘驱动器不支持。
答案 2 :(得分:0)
我目前在计算机上没有软驱,所以无法测试。当驱动器不可用时抛出此异常,这是我相信当软盘驱动器为空时会遇到的情况。
答案 3 :(得分:0)
也许您可以查看磁盘管理API ...它应该能够告诉您磁盘的容量(无论是否格式化)......
如果没有容量,则没有插入软盘......
答案 4 :(得分:0)
陷阱DiscNotReady(驱动器中没有磁盘),并写入例外(对于无效文件系统/未格式化)。
答案 5 :(得分:0)
乔纳斯的工作:
bool MyDll::Class1::HasFloppy( wchar_t driveLetter ) {
wchar_t path[] = L"\\\\.\\A:";
path[ 4 ] = driveLetter;
SetLastError( 0 );
HANDLE drive = CreateFile( path, //__in LPCTSTR lpFileName,
GENERIC_READ, //__in DWORD dwDesiredAccess,
0, //__in DWORD dwShareMode,
0, //__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
OPEN_EXISTING, //__in DWORD dwCreationDisposition,
0, //__in DWORD dwFlagsAndAttributes,
0 //__in_opt HANDLE hTemplateFile
);
DWORD bytes_read;
char buf[ 512 ];
DWORD err( 0 );
if( !ReadFile( drive, buf, 512, &bytes_read, 0 ) )
err = GetLastError();
CloseHandle( drive );
return err != ERROR_NOT_READY;
}
答案 6 :(得分:0)
如果在软盘驱动器中插入未格式化的软盘,通常的目的是将该软盘驱动器与该软盘一起使用。然后,第一步是逻辑上格式化该软盘。
因此,如果您检测到一个非准备好的软盘驱动器,您可以尝试格式化磁盘,如果成功,您的软盘驱动器应该已准备就绪,其中包含一个新格式化的软盘。 如果未使用的软盘驱动器的格式失败,则其中没有软盘,或者其中的软盘出现故障。然后,您可以显示一条消息,以便在驱动器中插入软盘。