C#将字节数组附加到现有文件

时间:2011-07-28 16:29:45

标签: c# arrays byte append concatenation

我想将一个字节数组附加到现有文件(C:\test.exe)。假设以下字节数组:

byte[] appendMe = new byte[ 1000 ] ;

File.AppendAllBytes(@"C:\test.exe", appendMe); // Something like this - Yes, I know this method does not really exist.

我会使用File.WriteAllBytes执行此操作,但我将使用ENORMOUS字节数组,并且不断抛出System.MemoryOverload异常。因此,我很可能不得不将大型数组拆分为多个部分,并将每个字节数组附加到文件的末尾。

谢谢,

埃文

5 个答案:

答案 0 :(得分:56)

一种方法是使用FileStream创建模式创建FileMode.Append

  

打开文件(如果存在)并搜索到文件的末尾,或者   创建一个新文件。

这看起来像是:

public static void AppendAllBytes(string path, byte[] bytes)
{
    //argument-checking here.

    using (var stream = new FileStream(path, FileMode.Append))
    {
        stream.Write(bytes, 0, bytes.Length);
    }
}

答案 1 :(得分:6)

  1. 创建新的FileStream
  2. Seek()到最后。
  3. Write()字节。
  4. Close()流。

答案 2 :(得分:5)

您还可以使用内置的FileSystem.WriteAllBytes Method (String, Byte[], Boolean)

public static void WriteAllBytes(
    string file,
    byte[] data,
    bool append
)

设置附加到 True 以附加到文件内容; 错误覆盖文件内容。默认值为False。

答案 3 :(得分:3)

我不确定问题是什么,但C#有一个BinaryWriter方法,它接受一个字节数组。

BinaryWriter(Byte[])

bool writeFinished = false;
string fileName = "C:\\test.exe";
FileStream fs = new FileString(fileName);
BinaryWriter bw = new BinaryWriter(fs);
int pos = fs.Length;
while(!writeFinished)
{
   byte[] data = GetData();
   bw.Write(data, pos, data.Length);
   pos += data.Length;
}

当附加了所有数据时writeFinished为真,并且GetData()返回要追加的数据数组。

答案 4 :(得分:0)

你可以简单地创建一个函数来执行此操作

public static void AppendToFile(string fileToWrite, byte[] DT)
{
    using (FileStream FS = new FileStream(fileToWrite, File.Exists(fileToWrite) ? FileMode.Append : FileMode.OpenOrCreate, FileAccess.Write)) {
        FS.Write(DT, 0, DT.Length);
        FS.Close();
    }
}