Visual C++ .NET - Funcion CreateFile

 
Vista:

Funcion CreateFile

Publicado por eljhonb (1 intervención) el 02/10/2008 00:47:10
Buenas, soy nuevo en este tema y quisiera una ayuda en el manejo de la funcion CreateFile para el manejo de directorios.
pruebo a hacerlo asi:

HANDLE h;
const TCHAR* dir1 = TEXT("c:\temp");

// open handle to temp.
h = CreateFile(dir1, FILE_LIST_DIRECTORY, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

pero cuando ejecuto me muestra un error tipo 5, es decir
ERROR_ACCESS_DENIED..
Alguno me podria decir como hacer la llamada a la funcion para que me abra el directorio para poder leer los archivos que hay dentro?

de antemano muchas gracias!
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

Uso de CreateFile para acceder a directorios

Publicado por Alejandro (265 intervenciones) el 05/02/2024 21:11:57
Eljhonb, para utilizar la función `CreateFile` para abrir un directorio en Visual C++ .NET, hay algunas consideraciones importantes. Aquí tienes una corrección en tu código y algunas explicaciones:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <Windows.h>
 
int main() {
    HANDLE h;
    const TCHAR* dir1 = TEXT("c:\\temp");  // Asegúrate de usar doble barra invertida para representar la barra invertida en las rutas de Windows.
 
    // Abre el directorio temp.
    h = CreateFile(dir1, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
 
    if (h == INVALID_HANDLE_VALUE) {
        // Manejar el error, por ejemplo, mostrar el código de error.
        DWORD error = GetLastError();
        wprintf(L"Error al abrir el directorio. Código de error: %d\n", error);
        return 1;
    }
 
    // Realizar operaciones en el directorio, como enumerar archivos.
 
    // No olvides cerrar el handle cuando hayas terminado de usarlo.
    CloseHandle(h);
 
    return 0;
}

Cambios realizados:
1. Se corrigió la ruta del directorio a `c:\\temp` para asegurar el formato correcto de la ruta en Windows.
2. Se añadió `FILE_FLAG_BACKUP_SEMANTICS` al conjunto de flags para indicar que estás abriendo un directorio.
3. Se añadieron los flags `FILE_SHARE_WRITE` y `FILE_SHARE_DELETE` en `FILE_SHARE_READ` para permitir el acceso concurrente de otros procesos.

Es importante tener en cuenta que para trabajar con directorios, debes especificar `FILE_FLAG_BACKUP_SEMANTICS` y usar `FILE_LIST_DIRECTORY` en el parámetro `dwDesiredAccess`. Además, asegúrate de tener los permisos adecuados para acceder al directorio especificado.

Recuerda manejar los errores adecuadamente para identificar cualquier problema que pueda surgir al intentar abrir el directorio.
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