سؤال

وكنت قد كتبت البرنامج الذي سوف etablish اتصال شبكة مع جهاز كمبيوتر عن بعد باستخدام TCPClient أنا استخدامه لنقل الملفات في 100K قطع إلى تطبيق صافي عن بعد وذلك inturn ثم يكتب لهم إلى طوة. جميع نقل الملفات العمل الجيد إلا عندما يتعلق الأمر الرمز البريدي الملفات - ومن الغريب أن نلاحظ أن الملف reasembled دائما 98K ... هناك بعض سرا عظيما لملفات ZIP التي تمنعهم من يجري التعامل معها على هذا النحو. مرة أخرى عن نقل الملفات الأخرى تعمل بشكل جيد، صورة، XLS، TXT، CHM، إكس الخ.

والخلط

هل كانت مفيدة؟

المحلول

حسنا، أنت لم يظهر أي رمز لذلك فمن صعبة نوعا ما أن نقول بالضبط ما هو الخطأ.

و <م> المعتاد الخطأ هو أن نفترض أن Stream.Read يقرأ كافة البيانات التي يطلب منها بدلا من أن يدركوا أنه قد قراءة أقل، إلا أن المبلغ الذي في الواقع قراءة هو قيمة الإرجاع.

وبعبارة أخرى، ينبغي أن لا تكون متاحة:

byte[] buffer = new byte[input.Length];
input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, buffer.Length);

ولكن شيئا من هذا القبيل:

byte[] buffer = new byte[32 * 1024];
int bytesRead;
while ( (bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
    output.Write(buffer, 0, bytesRead);
}

ولكن هذا مجرد تخمين. إذا كنت قد الرد على بعض التعليمات البرمجية، سيكون لدينا فرصة أفضل من الاعتقاد بها.

نصائح أخرى

والرمز الفعلي سيكون مفيدا.

هل تستخدم BinaryReader / BinaryWriter؟

و(أي. البيانات استنادا بدلا من النص القائم).

هل يمكن أن تحاول استخدام ملف عرافة مقارنة (على سبيل المثال بعدها قارن ) لمقارنة الأصلي ونسخ و نرى ما اذا كان يعطيك أي أدلة.

قد يكون أنك الكتابة (بدلا من إلحاق ل) الملف الموجود مع كل قطعة تلقى؟ لذلك الحجم النهائي للملف سيكون <= حجم قطعة واحدة.

ولكن من دون أي رمز، فإنه من الصعب معرفة سبب المشكلة.

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