如何检测驱动器中是否有软盘?

时间:2008-09-25 19:26:29

标签: .net

我尝试使用DriveInfo.IsReady,但如果驱动器中有未格式化的软盘,则返回false。

7 个答案:

答案 0 :(得分:3)

您总是可以尝试从软盘中读取扇区,看看它是否成功。

我不知道如何在.NET中做到这一点,但这里是C / C ++的等价物。

SetLastError(0);
HANDLE h = CreateFile("\\\\.\\A:", ...);
if (!ReadFile(h, buf, 512, &bytes_read, 0))
{
  DWORD err = GetLastError();
}

CreateFileReadFile

答案 1 :(得分:1)

简单地说:你做不到。软盘驱动器不支持。

答案 2 :(得分:0)

DriveNotFoundException怎么办?

我目前在计算机上没有软驱,所以无法测试。当驱动器不可用时抛出此异常,这是我相信当软盘驱动器为空时会遇到的情况。

答案 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)

如果在软盘驱动器中插入未格式化的软盘,通常的目的是将该软盘驱动器与该软盘一起使用。然后,第一步是逻辑上格式化该软盘。

因此,如果您检测到一个非准备好的软盘驱动器,您可以尝试格式化磁盘,如果成功,您的软盘驱动器应该已准备就绪,其中包含一个新格式化的软盘。 如果未使用的软盘驱动器的格式失败,则其中没有软盘,或者其中的软盘出现故障。然后,您可以显示一条消息,以便在驱动器中插入软盘。