كيفية الحصول على الأساسي stdio FILE * من System.IO.FileStream إدارتها؟
-
03-07-2019 - |
سؤال
وأنا أكتب محول. NET لC / C ++ مكتبة حيث طريقة "شريط" يأخذ stdio FILE العادي *. هل من الممكن لبناء واجهة بحيث يمكن إدارتها رمز المستخدم تمرير تمكن (ملف) تيار؟ وهذا هو دون خلق وجود مخزن مؤقت وسيط ورمز لأنابيب البيانات بين. كما تقوم على افتراض أن شريط () يقرأ إلا أن يجعل الأمور أفضل حالا؟
// native code
void bar(FILE*);
// interface for managed code
void foo(System::IO::FileStream^ file)
{
FILE* stdio_handle = ???;
bar(stdio_handle);
}
المحلول
وانها ليست بالضرورة stdio
التعامل معها. انها التعامل مع ويندوز. لا أعتقد بنيت FileStream
على stdio
لديك مؤشر stdio
.
وكما أشار مارك بها والمذكورة في الرابط MSDN، قد ترغب في النظر في استخدام الممتلكات SafeFileHandle
(إذا كنت على صافي 2.0+) بدلا من Handle
(الذي يعتبر الآن عفا عليها الزمن). Handle
فقط يتوفر في الإصدارات القديمة، وإن كان.
نصائح أخرى
هل من الممكن لبناء واجهة بحيث يمكن للمستخدم التعليمات البرمجية المدارة تمرير تمكن (ملف) ستريم؟
اقتباس فقرة> لا، انها ليست من الممكن تحويل تيار لواصف ملف (FILE
*).
إذا كان لديك لديك مؤشر stdio، هل يمكن دائما استخدام FOPEN لفتح ملف في المقام الأول. يصف هذا مجمع لتصدير ملف stdlib ج وظائف وثم يستخدم إمكانية التشغيل المتداخل للعمل معهم.