ج # - كيف قرأت وكتابة ملف ثنائي؟
-
11-09-2019 - |
سؤال
كيف يمكنني قراءة صفيف بايت RAW من أي ملف، وكتابة صفيف البايت مرة أخرى إلى ملف جديد؟
المحلول
(تحرير: لاحظ أن السؤال تغير؛ لم يذكر byte[]
في البداية؛ يرى مراجعة رقم 1)
نحن سوف، File.Copy
قفز إلى الذهن؛ ولكن خلاف ذلك هذا يبدو وكأنه Stream
سيناريو:
using (Stream source = File.OpenRead(inPath))
using (Stream dest = File.Create(outPath)) {
byte[] buffer = new byte[2048]; // pick size
int bytesRead;
while((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) {
dest.Write(buffer, 0, bytesRead);
}
}
نصائح أخرى
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
هل تعرف عن textreader. و كتاب نص, ونحفهم streamreader. و كتاب Streamب أعتقد أن هذه سوف تحل مشكلتك لأنها تتعامل مع الترميزات، ولا يعرف BinaryReader عن الترميزات أو حتى النص، فهي تهتم فقط بالبايت.
إضافة إجابة محدثة،
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest);
}
}
يمكنك اختياريا تحديد حجم المخزن المؤقت
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest, 2048); // or something bigger.
}
}
أو يمكنك تنفيذ العملية على موضوع آخر،
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
await source.CopyToAsync(dest);
}
}
والتي ستكون مفيدة عندما يكون للخيط الرئيسي القيام بعمل آخر، مثل تطبيقات WPF و Windows Apps.
لا تنتمي إلى StackOverflow