¿Cómo obtener el archivo stdio FILE * subyacente de un System.IO.FileStream administrado?

StackOverflow https://stackoverflow.com/questions/819268

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un adaptador .NET para una biblioteca C / C ++ donde un método " barra " lleva un archivo regular de archivo *. ¿Es posible crear una interfaz para que el usuario de código administrado pueda pasar un flujo administrado (archivo)? Eso es sin crear un búfer y un código intermedios para canalizar los datos entre ellos. También la suposición de que la lectura de la barra () solo mejora las cosas?

// native code
void bar(FILE*);

// interface for managed code
void foo(System::IO::FileStream^ file)
{
    FILE* stdio_handle = ???;

    bar(stdio_handle);
}
¿Fue útil?

Solución

System.IO.FileStream. Manejar

No es necesariamente un manejador de stdio . Es un manejador de Windows. No creo que FileStream esté basado en stdio para tener un identificador de stdio .

Como Marc señaló y mencionó en el enlace de MSDN, puede considerar el uso de la propiedad SafeFileHandle (si está en .NET 2.0+) en lugar de Handle ( que ahora se considera obsoleto). Sin embargo, solo Handle está disponible en versiones anteriores.

Otros consejos

  

¿Es posible construir una interfaz   para que el usuario de código administrado pueda pasar una   ¿Gestionado (Archivo) Stream?

No, no es posible convertir una secuencia a un descriptor de archivo ( FILE *).

Si tiene que tener un controlador de stdio, siempre puede usar fopen para abrir el archivo en primer lugar. Este describe un contenedor para exportar el archivo c stdlib Funciones y luego usa interoperabilidad para trabajar con ellas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top