Записать и прочитать несколько байтов [] в файл C# - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы записать в файл трехбайтовые массивы. И позже мне нужно будет читать так же. Можно ли в C# ?. Рассмотрим приведенный ниже пример:

byte[] source = new byte[0];
byte[] delim = new byte[0];
byte[] dest = new byte[0];

Итак, теперь я планировал записать все эти три байтовых массива вместе с одним файлом, как показано ниже,

byte[] writeData = new byte[source.Length + delim.Length + dest.Length];
Buffer.BlockCopy(source, 0, writeData, 0, source.Length);
Buffer.BlockCopy(delim, 0, writeData, source.Length, delim.Length);
Buffer.BlockCopy(dest, 0, writeData, source.Length + delim.Length, dest.Length);

File.WriteAllBytes("myfile.txt", writeData);

Через какое-то время я хотел бы прочитать файл и разделить массив байтов источника и назначения на основе разделителей. Является ли это возможным?. Если да, то как я могу этого добиться? Мы будем очень признательны за любой образец кода.

Заранее благодарим за вашу помощь.

1 Ответ

2 голосов
/ 29 мая 2020

Вы можете использовать BinaryWriter и BinaryReader , как показано ниже. Сначала запишите длину массива как int32, затем запишите байты массива. Повторите для второго массива. И наоборот, прочтите длину массива как int32, а затем прочтите это количество байтов. Повторите для второго массива:

byte[] source = new byte[2] { 1, 2 };
byte[] dest = new byte[6] { 2, 4, 8, 16, 32, 64 };

using (FileStream fs = new FileStream("myFile.txt", FileMode.OpenOrCreate))
{
    using (BinaryWriter bw = new BinaryWriter(fs))
    {
        bw.Write(source.Length);
        bw.Write(source, 0, source.Length);
        bw.Write(dest.Length);                    
        bw.Write(dest, 0, dest.Length);
    }                
}

byte[] source2;
byte[] dest2;
using (FileStream fs = new FileStream("myFile.txt", FileMode.Open))
{
    using (BinaryReader br = new BinaryReader(fs))
    {
        source2 = br.ReadBytes(br.ReadInt32());
        dest2 = br.ReadBytes(br.ReadInt32());
    }
}

Console.WriteLine("source = " + String.Join(" ", source));
Console.WriteLine("dest = " + String.Join(" ", dest));
Console.WriteLine("source2 = " + String.Join(" ", source2));
Console.WriteLine("dest2 = " + String.Join(" ", dest2));

Вывод:

source = 1 2
dest = 2 4 8 16 32 64
source2 = 1 2
dest2 = 2 4 8 16 32 64
...