using System; using System.IO; class FileByteInsertion { static void Main(string[] args) { string sourceFilePath = "source.pdf"; // 源文件路径 string outputFilePath = "output.pdf"; // 输出文件路径 int insertionPosition = 100; // 插入位置(第100字节后) byte[] bytesToInsert = { 0x01, 0x02 }; // 要插入的字节 try { InsertBytesAtPosition(sourceFilePath, outputFilePath, insertionPosition, bytesToInsert); Console.WriteLine("字节插入成功!"); } catch (Exception ex) { Console.WriteLine($"操作失败:{ex.Message}"); } } static void InsertBytesAtPosition(string sourcePath, string outputPath, int position, byte[] bytesToInsert) { // 验证输入参数 if (!File.Exists(sourcePath)) { throw new FileNotFoundException("源文件不存在!", sourcePath); } if (position < 0) { throw new ArgumentException("插入位置不能为负数!", nameof(position)); } // 获取源文件长度 long fileLength = new FileInfo(sourcePath).Length; // 检查插入位置是否超出文件长度 if (position > fileLength) { Console.WriteLine($"警告:插入位置({position})超出文件长度({fileLength}),将在文件末尾添加字节。"); position = (int)fileLength; } using (FileStream sourceStream = new FileStream(sourcePath, FileMode.Open, FileAccess.Read)) using (FileStream outputStream = new FileStream(outputPath, FileMode.Create, FileAccess.Write)) { byte[] buffer = new byte[4096]; int bytesRead; // 复制前position个字节 long bytesCopied = 0; while (bytesCopied < position) { int bytesToRead = (int)Math.Min(buffer.Length, position - bytesCopied); bytesRead = sourceStream.Read(buffer, 0, bytesToRead); if (bytesRead == 0) break; outputStream.Write(buffer, 0, bytesRead); bytesCopied += bytesRead; } // 插入新字节 outputStream.Write(bytesToInsert, 0, bytesToInsert.Length); // 复制剩余的字节 while ((bytesRead = sourceStream.Read(buffer, 0, buffer.Length)) > 0) { outputStream.Write(buffer, 0, bytesRead); } } } }
本文来自 www.luofenming.com