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

时间:2009-05-04 08:28:43

标签: .net c++ filestream stdio

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

// native code
void bar(FILE*);

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

    bar(stdio_handle);
}

3 个答案:

答案 0 :(得分:5)

System.IO.FileStream.Handle

不一定stdio处理。这是一个Windows手柄。我认为FileStream不是建立在stdio上,而是stdio句柄。

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

答案 1 :(得分:0)

  

是否可以构建界面   以便托管代码用户可以传递   托管(文件)流?

不,无法将流转换为文件描述符(FILE *)。

答案 2 :(得分:0)

如果你必须有一个stdio句柄,你可以随时使用fopen来打开文件。 This描述了一个用于导出c stdlib文件函数的包装器,然后他使用interop来处理它们。