كيفية الحصول على الأساسي stdio FILE * من System.IO.FileStream إدارتها؟

StackOverflow https://stackoverflow.com/questions/819268

  •  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);
}
هل كانت مفيدة؟

المحلول

System.IO.FileStream.Handle

وانها ليست بالضرورة stdio التعامل معها. انها التعامل مع ويندوز. لا أعتقد بنيت FileStream على stdio لديك مؤشر stdio.

وكما أشار مارك بها والمذكورة في الرابط MSDN، قد ترغب في النظر في استخدام الممتلكات SafeFileHandle (إذا كنت على صافي 2.0+) بدلا من Handle (الذي يعتبر الآن عفا عليها الزمن). Handle فقط يتوفر في الإصدارات القديمة، وإن كان.

نصائح أخرى

<اقتباس فقرة>   

هل من الممكن لبناء واجهة   بحيث يمكن للمستخدم التعليمات البرمجية المدارة تمرير   تمكن (ملف) ستريم؟

لا، انها ليست من الممكن تحويل تيار لواصف ملف (FILE *).

إذا كان لديك لديك مؤشر stdio، هل يمكن دائما استخدام FOPEN لفتح ملف في المقام الأول. يصف هذا مجمع لتصدير ملف stdlib ج وظائف وثم يستخدم إمكانية التشغيل المتداخل للعمل معهم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top