Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据追加到字节数组_C#_String_Bytearray - Fatal编程技术网

C# 将数据追加到字节数组

C# 将数据追加到字节数组,c#,string,bytearray,C#,String,Bytearray,目前,我正在从一个二进制文件(file.ReadAllBytes)读取数据,将这个字节数组转换成一个字符串,并将数据附加到这个字符串上。最后,我将字符串转换回字节数组,并将数据写入新文件 是的-这种方法相当愚蠢,我一直很好奇是否有办法将这些新数据附加到字节数组的末尾(以字节的形式) //ConvertToByteArray和ConvertToString表示转换字符串>字节>字符串的函数 我想做的是: b[] = file.readallbytes(s) b = b + "new Data" f

目前,我正在从一个二进制文件(file.ReadAllBytes)读取数据,将这个字节数组转换成一个字符串,并将数据附加到这个字符串上。最后,我将字符串转换回字节数组,并将数据写入新文件

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

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

我想做的是:

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);
        }