Intenté utilizar DriveInfo.IsReady, pero devuelve falso si hay un disquete sin formatear en la unidad.¿Cómo puedo detectar si hay un disquete en una unidad?
Respuesta
Siempre puede intentar leer un sector del disquete y ver si tiene éxito o no.
No tengo ni idea de cómo hacerlo en .NET, pero aquí está el equivalente de C/C++.
SetLastError(0);
HANDLE h = CreateFile("\\\\.\\A:", ...);
if (!ReadFile(h, buf, 512, &bytes_read, 0))
{
DWORD err = GetLastError();
}
Simplemente hablando: no se puede. Las unidades de disquetes no son compatibles.
Unidades de disquete DO soporte de descubrimiento de medios, intente guardar desde el Bloc de notas en una unidad vacía o en una unidad con un disco sin formato. Bloc de notas da dos respuestas diferentes. –
Observe que antes de que falle, se enciende la luz de acceso al disco. El Bloc de notas intenta leer un sector en el disco y, si falla, muestra el mensaje "inserte un disco". – OwenP
¿qué hay de DriveNotFoundException?
No tengo una disquetera en la computadora en la que estoy actualmente, así que no puedo probarla. Esta excepción se produce cuando el disco no está disponible, que es una condición que creo que se cumpliría cuando el disquete esté vacío.
Hasta ahora no puedo encontrar ningún método .Net que actúe de forma diferente para la caja de disquete y la caja de disquete sin formatear –
Tal vez se puede ver en las API de gestión de disco ... Eso debería ser capaz de decir que la capacidad del disco (ya sea el formato o no) ...
Y si no hay capacidad, no hay disquete insertado ...
Trampa DiscNotReady (para ningún disco en el disco), y excepciones de escritura (para el sistema de archivos no válido/no formateado).
Jonas cosas trabajaron:
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;
}
Dulce :) ¡Feliz hacking! –
Muy bonito, pero en realidad no se parece a .NET como preguntaste .. –
Si inserta un disquete sin formato en la unidad de disquete, el propósito sería normalmente a utilizar ese disquetera con ese disquete. El primer paso luego es lógicamente formatear ese disquete.
Por lo tanto, si detecta una unidad de disquete que no está lista, puede tratar de formatear el disco, y si tiene éxito, la unidad de disquete debería estar lista con un disquete recién formateado. Si falla el formato de la unidad de disquete no configurada, no hay un disquete o el disquete está defectuoso. Luego puede mostrar un mensaje para insertar un disquete en la unidad.
- 1. ¿Cómo detectar si una unidad específica es un disco duro?
- 2. ¿Cómo puedo detectar si una unidad tiene una papelera de reciclaje en C#?
- 3. Diferenciación programática entre unidad de disquete USB y unidad flash USB en Windows
- 4. ¿Hay alguna manera de detectar si una unidad es una SSD?
- 5. Detectar unidad USB en Java
- 6. ¿Cómo puedo desactivar dbstop si hay un error en MATLAB
- 7. ¿Cómo puedo detectar/calcular si hay una imagen pequeña dentro de una imagen más grande?
- 8. ¿Cómo realizar IO de bajo nivel con una unidad flash USB en el BIOS (en comparación con un disquete)?
- 9. En PowerShell, ¿cómo puedo determinar si la unidad actual es una unidad en red o no?
- 10. ¿Cómo puedo determinar si una letra de unidad determinada es una unidad local, asignada o USB?
- 11. ¿Cómo puedo detectar si Dispatcher.DisableProcessing está activo?
- 12. ¿Cómo puedo detectar si un selector devuelve nulo?
- 13. Cómo detectar si un usuario deja una página en PHP
- 14. ¿Cómo puedo detectar si un control ActiveX está cargado?
- 15. ¿Cómo puedo detectar si una pantalla es sensible al tacto?
- 16. cómo puedo detectar si tengo un iPhone 2G, 3G, 3GS
- 17. ¿Cómo puedo detectar cuando una unidad flash está conectada en Linux?
- 18. ¿Cómo puedo detectar si un navegador es compatible con MJPEG?
- 19. ¿Cómo puedo detectar si un iframe está cargado?
- 20. ¿Cómo puedo detectar una ThreadAbortException en un bloque finally? (.NET)
- 21. detectar si no hay conexión a Internet
- 22. Detectar unidad extraíble (por ejemplo, unidad flash USB) C/C++
- 23. Cómo detectar si un micrófono está presente
- 24. ¿Cómo puedo detectar un error en una consulta de Ajax?
- 25. ¿Hay alguna forma de detectar si un objeto está bloqueado?
- 26. ¿Cómo detectar si una variable ha cambiado?
- 27. ¿Cómo puedo detectar si estoy ejecutándose en la consola?
- 28. ¿Cómo puedo determinar si un dispositivo USB conectado es una unidad flash USB?
- 29. Webbrowser, detectar si hay un lector de PDF instalado?
- 30. ¿Hay alguna manera de detectar si una gota está por ocurrir en un JTree?
¿Qué es un disquete :) – FlySwat
Mi primera respuesta fue: "Mira hacia abajo en el disco". Pero me di cuenta de que probablemente sea inútil. ¿Por qué las unidades de disco ya no? –
Eso tiene sentido, ¿no? Un disco SINORME obviamente no está listo :-) –