如何获取受管System.IO.FileStream的基础stdio FILE*?

Ser*_*uei 0 .net c++ stdio filestream

我正在为C/C++库编写.NET适配器,其中方法"bar"采用常规stdio FILE*.是否可以构建一个接口,以便托管代码用户可以传递托管(文件)流?那就是没有创建中间缓冲区和代码来管理数据.还假设bar()读取只会让事情变得更好吗?

// native code
void bar(FILE*);

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

    bar(stdio_handle);
}
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 5

System.IO.FileStream.Handle

它不一定stdio处理.这是一个Windows手柄.我不认为FileStream是建立在stdio掌握之上的stdio.

正如Marc在MSDN链接中指出并提到的那样,您可能需要考虑使用SafeFileHandle属性(如果您使用的是.NET 2.0+)而不是Handle(现在已经过时).但只有Handle旧版本才提供.