Я не пробовал это, но это может сработать ...
System.IO.File.Create () / Open () вернет FileStream, оттуда вы можете использовать FileStream.SafeFileHandle иоттуда SafeFileHandle.DangerousGetHandle () предоставит вам собственную операционную систему HANDLE.
Затем в неуправляемом C _open_osfhandle () возьмет вашу HANDLE и вернет описатель int-файла.Передайте это _fdopen (), и он вернет ФАЙЛ *.
Длинный маршрут, с большим количеством возможностей для несовместимости и других ошибок.Но тебе может повезти!