C/Visual C - Unidad

 
Vista:

Unidad

Publicado por Sonsi (14 intervenciones) el 13/06/2001 14:33:58
Hola a todos,
tengo un problema con DriveComboBox del Builder C++3 y es que cuando accedo a la unidad a y a la e y no hay dentro ni diskettes ni cds me da el error I/O error 21. ¿Sabría alguien cómo resolver este error?
Gracias
Sonsoles
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Error I/O 21 en DriveComboBox al acceder a unidades vacías

Publicado por Alejandro (913 intervenciones) el 26/09/2024 18:48:48
¡Hola Sonsoles! El error I/O 21 en el componente DriveComboBox del Builder C++3 generalmente indica un error de dispositivo no listo. Esto puede ocurrir cuando intentas acceder a una unidad que no está lista o no tiene un medio válido (como un diskette o un CD) insertado.

Para evitar este error, puedes realizar algunas verificaciones antes de acceder a la unidad en el DriveComboBox. Aquí tienes algunas sugerencias:

1. Verifica si la unidad está lista: Puedes utilizar la función `GetDriveType` para verificar si la unidad está lista antes de acceder a ella. Por ejemplo:

1
2
3
4
5
6
7
8
#include <vcl.h>
#include <io.h>
 
bool IsDriveReady(char driveLetter)
{
    AnsiString drivePath = AnsiString(driveLetter) + ":\\";
    return (_access(drivePath.c_str(), 0) != -1);
}

En el ejemplo anterior, `driveLetter` es la letra de la unidad que deseas verificar (por ejemplo, 'A' o 'E'). La función `IsDriveReady` devuelve `true` si la unidad está lista y `false` si no lo está.

2. Verifica si hay un medio válido: Puedes utilizar la función `GetVolumeInformation` para verificar si hay un medio válido en la unidad. Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vcl.h>
#include <windows.h>
 
bool HasValidMedia(char driveLetter)
{
    AnsiString drivePath = AnsiString(driveLetter) + ":\\";
    DWORD volumeSerialNumber;
    DWORD maximumComponentLength;
    DWORD fileSystemFlags;
    char fileSystemName[MAX_PATH];
 
    return GetVolumeInformation(drivePath.c_str(), NULL, 0, &volumeSerialNumber, &maximumComponentLength, &fileSystemFlags, fileSystemName, MAX_PATH);
}

En el ejemplo anterior, `driveLetter` es la letra de la unidad que deseas verificar. La función `HasValidMedia` devuelve `true` si hay un medio válido en la unidad y `false` si no lo hay.

Antes de acceder a la unidad en el DriveComboBox, puedes llamar a estas funciones de verificación para asegurarte de que la unidad esté lista y tenga un medio válido. Si alguna de las funciones devuelve `false`, puedes mostrar un mensaje de error o realizar alguna otra acción adecuada.

Espero que estas sugerencias te ayuden a resolver el error I/O 21 en el DriveComboBox del Builder C++3.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar