Autor
|
Tema: [C++][?] Error en ReadConsole() (Leído 4,775 veces)
|
Horricreu
Wiki
Desconectado
Mensajes: 290
¡La verdad os hará libres!
|
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: #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 Saludos
|
|
« Última modificación: 31 Agosto 2010, 16:13 pm por Horricreu »
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
, revisa lo que has hecho: 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 Saludos!
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
Horricreu
Wiki
Desconectado
Mensajes: 290
¡La verdad os hará libres!
|
, revisa lo que has hecho: 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 Saludos! Ya lo sé, pero los parámetros están bien Saludos
|
|
|
En línea
|
|
|
|
Littlehorse
All the world's a stage
Moderador
Desconectado
Mensajes: 2.714
Nie Dam Sie
|
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!
|
|
|
En línea
|
An expert is a man who has made all the mistakes which can be made, in a very narrow field.
|
|
|
Horricreu
Wiki
Desconectado
Mensajes: 290
¡La verdad os hará libres!
|
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 Saludos PD: #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; }
|
|
« Última modificación: 31 Agosto 2010, 16:14 pm por Horricreu »
|
En línea
|
|
|
|
|
|