Avatar ·

كيفية إنشاء مصفوفة بايت (byte[]) من تيار (Stream) في C#؟

مرحباً بالجميع! أنا مطور C# مبتدئ، وقد واجهت مشكلة. أحتاج إلى قراءة جميع البيانات من تيار (Stream) إلى مصفوفة بايت (byte[]). يمكن الحصول على التيار من مصادر مختلفة: ملف، طلب شبكة، MemoryStream، إلخ. إليك مثال على الكود الذي أحاول كتابته: ```csharp public byte[] ReadStream(Stream stream) { // أعلم أن Stream لديه Length، لكنه ليس متاحاً دائماً. // كيف أقرأ جميع البايتات بشكل صحيح؟ byte[] buffer = new byte[stream.Length]; // خطأ "Stream does not support seeking" stream.Read(buffer, 0, (int)stream.Length); return buffer; } ``` المشكلة هي أن `stream.Length` قد يسبب استثناء `NotSupportedException` إذا كان التيار لا يدعم البحث (seeking). على سبيل المثال، عند العمل مع `NetworkStream` أو `GZipStream`، خاصية Length غير متاحة. بالإضافة إلى ذلك، حتى لو كان Length متاحاً، لست متأكداً من أن `Read()` سيقرأ جميع البيانات في استدعاء واحد. قد يعيد الأسلوب `Read()` بايتات أقل مما هو مطلوب. أنا أبحث