¿Hay una manera fácil de crear FILE * desde WinApi HANDLE que apunta a un extremo de la tubería? Algo parecido a lo que hacemos en UNIX: fdopen(fd,<mode>);
¿Cómo se crea FILE * desde HANDLE en WinApi?
17
A
Respuesta
20
Usted puede hacer esto pero tienes que hacerlo en dos pasos. Primero, llame al _open_osfhandle()
para obtener un descriptor de archivo de tiempo de ejecución de C desde un valor de MANEJO de Win32, luego llame al _fdopen()
para obtener un objeto FILE*
del descriptor de archivo.
-2
no se puede intercambiar (convertir) ellos .. si es necesario tener un archivo con el archivo * y el mango es necesario abrir dos veces
1
FILE* getReadBinaryFile(LPCWSTR path) {
HANDLE hFile = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
return nullptr;
}
int nHandle = _open_osfhandle((long)hFile, _O_RDONLY);
if (nHandle == -1) {
::CloseHandle(hFile); //case 1
return nullptr;
}
FILE* fp = _fdopen(nHandle, "rb");
if (!fp) {
::CloseHandle(hFile); //case 2
}
return fp;
}
mi código para obtener un descriptor de archivo binario de lectura abierta.
debe usar fclose para cerrar el ARCHIVO * si no lo necesita.
No hice la prueba para el caso 1 y 2, por lo tanto, utilícelo bajo su propia responsabilidad.
Cuestiones relacionadas
- 1. PyBrain: cuando se crea una red desde cero, ¿cómo y dónde se crea un sesgo?
- 2. Rails 3 - ¿Cómo se crea un nuevo registro desde link_to
- 3. TFS/File Checkout desde C#
- 4. Hardwarebreakpoint WINAPI
- 5. cómo se crea un NSManagedObjectContext
- 6. Se busca: registrador de llamadas WinAPI
- 7. Normalizar con WinAPI
- 8. ¿Cómo se crea un NSButton temático personalizado?
- 9. ¿Cómo se crea este efecto de imagen?
- 10. Cómo crear un temporizador en WinApi (C++)?
- 11. ¿Los mangos winapi son globales?
- 12. ¿Cómo se crea este menú CSS?
- 13. ¿Cómo se usa File Explorer en un dispositivo rooteado?
- 14. ¿Cómo se crea un MANIFEST.MF que está disponible cuando se está probando y ejecutándose desde un contenedor en producción?
- 15. ¿Cómo se crea una DLL COM en Visual Studio 2008?
- 16. Doble buffering winAPI
- 17. C library vs WinApi
- 18. python crea todo desde el montón?
- 19. Zend ¿Cómo se crea una combinación izquierda
- 20. ¿Cómo se crea un botón para alternar?
- 21. ¿Cómo se crea un módulo Perl?
- 22. ¿Cómo se crea un tono sepia?
- 23. ¿Cómo se crea un Play Module?
- 24. ¿Cómo obtener una secuencia FILE * desde un descriptor de archivo?
- 25. Cómo "borrar" una ventana transparente de WinAPI
- 26. Cómo crear una ventana pura de winapi
- 27. Encriptación AES simple usando WinAPI
- 28. ¿Cómo se crea una aplicación osx/dmg desde un paquete python?
- 29. ¿En qué condiciones se crea un JSESSIONID?
- 30. ¿Cuándo se crea VTable en C++?
¿Esas funciones asumen la propiedad del identificador subyacente o se debe llamar a CloseHandle? – user877329
@ user877329: Creo que todavía necesita llamar a 'CloseHandle()', pero valdría la pena verificarlo. Ha pasado bastante tiempo desde que utilicé esas funciones. El código fuente de la biblioteca de tiempo de ejecución de Microsoft viene con el compilador para que pueda escribir un programa de prueba y rastrearlo para verificar. –