[C++][?] Error en ReadConsole()

Iniciado por Horricreu, 18 Junio 2010, 22:36 PM

0 Miembros y 1 Visitante están viendo este tema.

Horricreu

#10
Gracias, ya puse esto pero continua sin ir. Vamos a ver, voy a ponerlo con imágenes y todo para que me creáis de que pongo bien la ruta y todo:

Código (cpp) [Seleccionar]
#include <windows.h>

int main()
{
        HANDLE hHeap = GetProcessHeap();

        LPSTR lpBuffer = "Escribe la ruta del fichero: ";
        WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), lpBuffer, lstrlen(lpBuffer), 0, 0);

        LPSTR lpFileName = (LPSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PATH);
        DWORD nNumberOfCharsRead = 0;
ReadConsole(GetStdHandle(STD_INPUT_HANDLE), lpFileName, MAX_PATH - 1, &nNumberOfCharsRead, 0);

HANDLE hFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox(0, "Error", "Error", 0);

lpFileName[lstrlen(lpFileName) - 2] = 0;
}

else MessageBox(0, "Funciona", "Funciona", 0);

return 0;
}


Escribo la ruta:



Y para comprobar que existe:



Luego no es culpa de la ruta :-\ :o

Saludos :P

Littlehorse

 :D, revisa lo que has hecho:

Código (cpp) [Seleccionar]
if(hFile == INVALID_HANDLE_VALUE)//Si CreateFile me devuelve error porque la ruta esta mal
{                                                       
   MessageBox(0,"Error","Error",0); //Imprimo mensaje de error

   lpFileName[lstrlen(lpFileName) - 2] = 0;// Y ahora si arreglo la ruta
}
//Termina el programa


Luego la culpa es de CreateFile  ;D

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Horricreu

Cita de: Littlehorse en 19 Junio 2010, 21:14 PM
:D, revisa lo que has hecho:

Código (cpp) [Seleccionar]
if(hFile == INVALID_HANDLE_VALUE)//Si CreateFile me devuelve error porque la ruta esta mal
{                                                       
   MessageBox(0,"Error","Error",0); //Imprimo mensaje de error

   lpFileName[lstrlen(lpFileName) - 2] = 0;// Y ahora si arreglo la ruta
}
//Termina el programa


Luego la culpa es de CreateFile  ;D

Saludos!

Ya lo sé, pero los parámetros están bien :)

Saludos :P

Littlehorse

No horricreu, no están bien. Vuelve a leer el hilo completo y analiza todo lo que te he dicho yo y todo lo que te ha dicho Eternal Idol. Estas intentando pasarle a CreateFile una ruta incorrecta y la finalizas correctamente solamente si CreateFile te da un error pero jamas vuelves a llamar a CreateFile nuevamente.

No seria mejor finalizar correctamente la cadena antes de llamar a CreateFile?

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Horricreu

#14
Cita de: Littlehorse en 19 Junio 2010, 21:23 PM
No horricreu, no están bien. Vuelve a leer el hilo completo y analiza todo lo que te he dicho yo y todo lo que te ha dicho Eternal Idol. Estas intentando pasarle a CreateFile una ruta incorrecta y la finalizas correctamente solamente si CreateFile te da un error pero jamas vuelves a llamar a CreateFile nuevamente.

No seria mejor finalizar correctamente la cadena antes de llamar a CreateFile?

Saludos!


¡Ya está solucionado! Gracias Eternal Idol y Littlehorse por vuestra ayuda, he aprendido algo nuevo ;) :xD

Saludos :P

PD:

Código (cpp) [Seleccionar]
#include <windows.h>

int main()
{
        HANDLE hHeap = GetProcessHeap();

        LPSTR lpBuffer = "Escribe la ruta del fichero: ";
        WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), lpBuffer, lstrlen(lpBuffer), 0, 0);

        LPSTR lpFileName = (LPSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PATH);
        DWORD nNumberOfCharsRead = 0;
ReadConsole(GetStdHandle(STD_INPUT_HANDLE), lpFileName, MAX_PATH - 1, &nNumberOfCharsRead, 0);

        lpFileName[lstrlen(lpFileName) - 2] = 0;

HANDLE hFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

if(hFile == INVALID_HANDLE_VALUE) MessageBox(0, "Error", "Error", 0);

else MessageBox(0, "Funciona", "Funciona", 0);

return 0;
}