如何获取托管 System.IO.FileStream 的底层 stdio FILE*?

发布于 2024-07-18 01:01:39 字数 332 浏览 12 评论 0原文

我正在为 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);
}

I'm writing a .NET adaptor for a C/C++ library where a method "bar" takes a regular stdio FILE*. Is it possible to build an interface so that managed code user can pass a managed (File)Stream? That is without creating an intermediary buffer and code to pipe the data between. Also does the assumption that bar() reads only make things any better?

// native code
void bar(FILE*);

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

    bar(stdio_handle);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你没皮卡萌 2024-07-25 01:01:40

System.IO.FileStream.Handle

它不一定是 stdio 句柄。 这是一个 Windows 句柄。 我不认为 FileStream 是基于 stdio 构建的,因此没有 stdio 句柄。

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

System.IO.FileStream.Handle

It's not necessarily stdio handle. It's a Windows handle. I don't think FileStream is built upon stdio to have a stdio handle.

As Marc pointed out and mentioned in the MSDN link, you might want to consider using SafeFileHandle property (if you are on .NET 2.0+) instead of Handle (which is now considered obsolete). Only Handle is available in older versions, though.

枯叶蝶 2024-07-25 01:01:40

是否可以建立一个界面
这样托管代码用户就可以通过
托管(文件)流?

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

Is it possible to build an interface
so that managed code user can pass a
managed (File)Stream?

No, it's not possible to convert a stream to a file descriptor (FILE*).

何止钟意 2024-07-25 01:01:40

如果你必须有一个 stdio 句柄,你总是可以首先使用 fopen 打开文件。 描述了导出c stdlib文件的包装器函数,然后他使用互操作来处理它们。

If you have to have a stdio handle, you could always use fopen to open the file in the first place. This describes a wrapper to export the c stdlib file functions and then he uses interop to work with them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文