将数据附加到字节数组

9 c# string bytearray

目前,我正在读取二进制文件(File.ReadAllBytes)中的数据,将此字节数组转换为字符串并将数据附加到此字符串上.最后,我将字符串转换回字节数组并将数据写回新文件.

是的 - 这种方法非常愚蠢,我一直很好奇是否有某种方法将这些数据附加到字节数组的末尾(以字节的形式).

String s = @"C:\File.exe";
Byte b[] = File.ReadAllBytes(s);

String NewString = ConvertToString(b[]);

NewString = NewString + "Some Data";

b[] = ConvertToByteArray(NewString);
File.WriteAllBytes(b[]);
Run Code Online (Sandbox Code Playgroud)

// ConvertToByteArray和ConvertToString表示转换字符串>字节>字符串的函数.

我想做什么:

b[] = file.readallbytes(s)
b = b + "new Data"
file.writeallbytes(b[])
Run Code Online (Sandbox Code Playgroud)

非常感谢您对此事的任何见解.

Jus*_*tin 16

您应该习惯使用Streams - 在这种情况下,您可以使用a MemoryStream来实现完全相同的东西,而不需要所有那些讨厌的数组.

byte[] bytes = File.ReadAllBytes(inFilePath);
using (MemoryStream ms = new MemoryStream())
{
    // You could also just use StreamWriter to do "writer.Write(bytes)"
    ms.Write(bytes, 0, bytes.Length);

    using (StreamWriter writer = new StreamWriter(ms))
    {
        writer.Write("Some Data");
    }

    File.WriteAllBytes(outFilePath, ms.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

令人欣慰的是,这看起来比你的代码更加复杂,但是在幕后它正在做的事情更有效率.

当然,如果您只是写入另一个文件(甚至是同一个文件),您可以直接写入文件并跳过对byte数组的需要或MemoryStream完全 - 这就是流的美妙之处.


Meh*_*dad 5

使用FileStream,寻找文件的末尾,然后写下你需要的东西:

using (var fs = new FileStream(s, FileMode.Open, FileAccess.ReadWrite))
{
    fs.Seek(SeekOrigin.End);
    fs.Write(data, 0, data.Length);
}
Run Code Online (Sandbox Code Playgroud)

如果你真的需要阅读整个文件,那么只需使用Array.Resize更大的缓冲区,然后复制你想要追加的部分.

var data = File.ReadAllBytes(s);
Array.Resize(ref data, data.Length + toAppend.Length);
Array.Copy(toAppend, 0, data, data.Length - toAppend.Length, toAppend.Length);
File.WriteAllBytes(s, data);
Run Code Online (Sandbox Code Playgroud)

抱歉,没有"速记".:\


如果这一点的全部内容是附加一个字符串,那就用File.AppendAllText吧!


pic*_*ypg 5

使用a List<Byte>,添加初始ReadAllBytes使用的每个字节AddRange,然后添加下一组字节.最后,用于CopyTo将所有字节复制到一个数组(大小List.Length).