C# 将数据追加到字节数组
目前,我正在从一个二进制文件(file.ReadAllBytes)读取数据,将这个字节数组转换成一个字符串,并将数据附加到这个字符串上。最后,我将字符串转换回字节数组,并将数据写入新文件 是的-这种方法相当愚蠢,我一直很好奇是否有办法将这些新数据附加到字节数组的末尾(以字节的形式) //ConvertToByteArray和ConvertToString表示转换字符串>字节>字符串的函数 我想做的是:C# 将数据追加到字节数组,c#,string,bytearray,C#,String,Bytearray,目前,我正在从一个二进制文件(file.ReadAllBytes)读取数据,将这个字节数组转换成一个字符串,并将数据附加到这个字符串上。最后,我将字符串转换回字节数组,并将数据写入新文件 是的-这种方法相当愚蠢,我一直很好奇是否有办法将这些新数据附加到字节数组的末尾(以字节的形式) //ConvertToByteArray和ConvertToString表示转换字符串>字节>字符串的函数 我想做的是: b[] = file.readallbytes(s) b = b + "new Data" f
b[] = file.readallbytes(s)
b = b + "new Data"
file.writeallbytes(b[])
非常感谢您对此事的深入了解。使用
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);
对不起,这里没有“速记”这个词\
如果整个要点是附加一个字符串,只需使用 创建一个大小为两个单独数组之和的新数组,然后将数组复制到其中。您应该习惯于使用流-在这种情况下,您可以使用
内存流
来实现完全相同的目标,而不必使用所有这些讨厌的数组
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());
}
令人钦佩的是,这看起来比您的代码复杂得多,但在幕后,它所做的工作效率更高
当然,如果您只是在写入另一个文件(甚至是同一个文件),您可以直接写入该文件,完全不需要使用
字节数组或内存流
——这就是流的美妙之处。如果您只是想在文件中添加一些内容,然后您应该使用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);
}
使用a,使用AddRange
添加初始ReadAllBytes
中的每个字节,然后添加下一组字节。最后,使用CopyTo
将所有字节复制到一个数组(大小为List.Length
)。您是否建议我也使用filestream读取二进制文件?@Evan:不,抱歉,请参阅我的编辑。这是假设您实际上不需要读取整个文件;如果你这样做了,就使用数组。调整大小。我想“和”的意思是“串联”或什么的,对吗?@Mehrdad a1.Lenght+a2.Lenght就是这样。我的英语不好,可悲,但却是真的:)我只是好奇,你能给我一个如何加入下面的例子吗?字节[]b数据;字符串sData=“测试数据”;bData=bData+换算成字节(sData);我读了一些清单上的内容,但我还是有点困惑。这和我预想的完全一样。非常感谢您抽出时间。(你们所有人)。
using (var f = File.Open(@"C:\File.exe", FileMode.Append))
{
byte[] buf = new byte[] { 69, 65, 66, 67 };
f.Write(buf, 0, buf.Length);
}