2008-09-25 35 views
5

Tôi đã cố gắng sử dụng DriveInfo.IsReady, nhưng nó trả về false nếu đĩa mềm chưa định dạng nằm trong ổ đĩa.Làm cách nào để phát hiện xem có đĩa mềm trong ổ đĩa?

+1

Có một đĩa mềm :) – FlySwat

+0

Phản hồi đầu tiên của tôi là: "Nhìn xuống ổ đĩa." Nhưng tôi nhận ra điều đó có lẽ vô giá trị. Tại sao có ổ đĩa mềm nữa? –

+0

Điều đó có ý nghĩa phải không? Đĩa UNFORMATTED rõ ràng là chưa sẵn sàng :-) –

Trả lời

3

Bạn luôn có thể thử đọc một sector từ đĩa mềm và xem nó có thành công hay không.

Tôi không có đầu mối làm thế nào để làm điều đó trong .NET, nhưng đây là tương đương C/C++.

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

CreateFile, ReadFile

1

Nói đơn giản: bạn không thể. Ổ đĩa mềm không hỗ trợ điều đó.

+0

Ổ đĩa mềm DO hỗ trợ phát hiện phương tiện truyền thông, Hãy thử lưu từ Notepad vào một ổ đĩa trống hoặc ổ đĩa với một đĩa chưa định dạng trong đó. Notepad đưa ra hai câu trả lời khác nhau. –

+0

Lưu ý rằng trước khi nó không thành công, đèn truy cập đĩa sẽ sáng. Notepad cố gắng đọc một sector trên đĩa, và nếu nó thất bại, nó sẽ hiển thị thông báo "please insert a disk". – OwenP

0

còn khoảng DriveNotFoundException?

Tôi không có ổ đĩa mềm trong máy tính tôi đang sử dụng, vì vậy tôi không thể kiểm tra nó. Ngoại lệ này được ném khi ổ đĩa không khả dụng, đó là điều kiện mà tôi tin rằng sẽ được đáp ứng khi ổ đĩa mềm rỗng.

+0

Cho đến nay tôi không thể tìm thấy bất kỳ phương thức .Net nào hoạt động khác với trường hợp không có đĩa mềm và trường hợp đĩa mềm chưa định dạng –

0

lẽ bạn có thể nhìn vào các API quản lý đĩa ... Điều đó sẽ có thể cho bạn biết dung lượng của đĩa (dù là định dạng hay không) ...

Và nếu không có năng lực, không có đĩa mềm chèn ...

0

Bẫy cả DiscNotReady (Không có đĩa trong ổ đĩa), và viết Ngoại lệ (Đối với hệ thống tệp không hợp lệ/không được định dạng).

0

Jonas thứ làm việc:

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; 

}

+0

Ngọt ngào :) Hacking vui vẻ! –

+0

Rất đẹp nhưng nó không thực sự giống như .NET như bạn đã hỏi .. –

0

Nếu bạn chèn một đĩa mềm chưa định dạng trong ổ đĩa mềm của bạn, mục đích của họ bình thường để sử dụng ổ đĩa mềm với đĩa mềm đó. Bước đầu tiên sau đó là logic để định dạng đĩa mềm đó.

Vì vậy, nếu bạn phát hiện một ổ đĩa mềm không sẵn sàng, bạn có thể thử để định dạng đĩa, và nếu điều đó thành công, ổ đĩa mềm của bạn sẽ trở nên sẵn sàng với một đĩa mềm mới được định dạng trong đó. Nếu định dạng của ổ đĩa mềm chưa được giải quyết không thành công, thì không có đĩa mềm trong đó, hoặc đĩa mềm trong đó bị lỗi. Sau đó, bạn có thể hiển thị một thông báo để chèn một đĩa mềm vào ổ đĩa.

Các vấn đề liên quan