如何在C#中的FileStream中插入字节

时间:2014-04-04 18:46:02

标签: c# .net byte filestream

如果我有一个包含此数据的文件:

01 02 03 04 05 06 07 08 09 0A

当我尝试插入字节FF时,例如,在01和02之间,新文件将是这样的:

01 FF 03 04 05 06 07 08 09 0A

但是我想插入那个字节而不是替换一个。我该怎么办?

01 FF 02 03 04 05 06 07 08 09 0A

2 个答案:

答案 0 :(得分:2)

  1. 您需要创建一个具有适当大小的新数组
  2. 以相同的顺序插入02之前的所有字节
  3. 插入新字节
  4. 你必须将所有字节从02移到右边
  5. 所以主要是这个

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var insertInPos = 1;
    
                var inBytes = new byte[] {01 ,02 ,03, 04, 05, 06, 07, 08, 09, 0x0A };
    
                var insertBytes = new byte[] {0xFF, 0xDD};
    
                var newBytes = InsertBytes(inBytes, insertBytes, insertInPos);
            }
    
            public static byte[] InsertBytes(byte[] inBytes, byte[] insertBytes, int insertInPos)
            {
                var insertLen = insertBytes.Length - 1;
    
                var outBytes = new byte[inBytes.Length + insertLen + 1];
                var outLen = outBytes.Length - 1;
    
                for (int i = 0, j = 0; i < outLen; ++i)
                {
                    if (i < insertInPos)
                    {
                        outBytes[i] = inBytes[i];
                    }
                    else if (i == insertInPos)
                    {
                        while (j <= insertLen)
                        {
                            outBytes[i + j] = insertBytes[j++];
                        }
                    }
                    else
                    {
                        outBytes[i + insertLen] = inBytes[i - insertLen];
                    }
                }
    
                return outBytes;
            }
        }
    }
    

答案 1 :(得分:0)

 int index=1;

        byte item=01;
            List<byte> by = new List<byte>();
            string path = "Path here";
            Byte[] b = File.ReadAllBytes(path);

            by = b.ToList();
            by.Insert(index, item);