【发布时间】:2015-07-21 03:52:49
【问题描述】:
我需要在 Python 中打开一个可写文件句柄,然后将文件描述符交给 .NET 程序集中的函数(通过 pythonnet's clr module 访问。
从 Python 文件对象获取到 win32 HANDLE* 相当简单,如this question 所示:
import clr
from Microsoft.Win32.SafeHandles import SafeFileHandle
from System.IO import FileStream, FileAccess
pyf=open("c:/temp/testing123.txt","w")
fileno=pyf.fileno()
print fileno # 6
handle = msvcrt.get_osfhandle(fileno)
print handle # 1832L
According to MSDN,现在应该可以从直接的 IntPtr(句柄)或 SafeFileHandle 包装器构造标准的 FileStream 对象。
FileStream(IntPtr, FileAccess)
FileStream(SafeFileHandle, FileAccess)
问题是...如何说服clr 模块将handle 转换为IntPtr?
我尝试了以下各种版本,但它们都给我错误:
FileStream(IntPtr(handle), True)
FileStream(IntPtr(Int64(handle), True)
FileStream(IntPtr(Int32(handle), True)
SafeFileHandle(IntPtr(handle), True)
...
=> TypeError ("value cannot be converted to System.IntPtr")
关于如何将这个该死的文件句柄转换为 C# 的任何建议?
【问题讨论】:
-
否则为什么不使用 COM,如果这是 Win32?
-
@denfromufa,由于各种原因,CLR API 更适合这个项目。您链接到的答案解释了如何将托管句柄从 C++ 转换为 C#,但不幸的是,它对我的 Python 案例没有帮助。
标签: c# python clr handle python.net