将数据附加到字节数组

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

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

String s = @"C:\File.exe"; Byte b[] = File.ReadAllBytes(s); String NewString = ConvertToString(b[]); NewString = NewString + "Some Data"; b[] = ConvertToByteArray(NewString); File.WriteAllBytes(b[]); 

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

我想做什么:

 b[] = file.readallbytes(s) b = b + "new Data" file.writeallbytes(b[]) 

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

你应该习惯使用Streams – 在这种情况下你可以使用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()); } 

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

当然,如果你只是写入另一个文件(甚至是同一个文件),你可以直接写入文件,完全不需要byte数组或MemoryStream – 这就是流的美妙之处。

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

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

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

如果你真的需要读取整个文件,那么只需使用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); 

抱歉,没有“速记”。 :\


如果这一点的全部内容是附加一个字符串 ,只需使用File.AppendAllText

如果您只想在文件中附加内容,那么您应该使用FileStream和StreamWriter:

  using (var f = File.Open(@"C:\File.exe", FileMode.Append)) using (var w = new StreamWriter(f)) w.Write("new Data"); 

或类似的东西。

如果你只想附加一些字节:

  using (var f = File.Open(@"C:\File.exe", FileMode.Append)) { byte[] buf = new byte[] { 69, 65, 66, 67 }; f.Write(buf, 0, buf.Length); } 

创建一个大小为两个独立数组之和的新数组,然后将数组复制到该数组。