2016-04-19 18 views
1

私は、ファイル内の大部分のバイトを見つけ、それらを削除して、古いものが始まったところから始まるバイトの新しい大きなセクションをインポートすることを考えています。ここでファイルの大部分のバイトを見つけて置き換える方法は?

は、私はC#で再作成しようとしている手動のプロセスのビデオだ、それは少し良くそれを説明することがありますhttps://www.youtube.com/watch?v=_KNx8WTTcVA

私は、私が一緒に行くようにC#はとても勉強を有する唯一の基本的な経験を持っています、これについてのどんな助けも非常に高く評価されるでしょう!

ありがとうございました。

答えて

1

この質問を参照してください: C# Replace bytes in Byte[]

次のクラスを使用します。

public static class BytePatternUtilities 
{ 
    private static int FindBytes(byte[] src, byte[] find) 
    { 
     int index = -1; 
     int matchIndex = 0; 
     // handle the complete source array 
     for (int i = 0; i < src.Length; i++) 
     { 
      if (src[i] == find[matchIndex]) 
      { 
       if (matchIndex == (find.Length - 1)) 
       { 
        index = i - matchIndex; 
        break; 
       } 
       matchIndex++; 
      } 
      else 
      { 
       matchIndex = 0; 
      } 

     } 
     return index; 
    } 

    public static byte[] ReplaceBytes(byte[] src, byte[] search, byte[] repl) 
    { 
     byte[] dst = null; 
     byte[] temp = null; 
     int index = FindBytes(src, search); 
     while (index >= 0) 
     { 
      if (temp == null) 
       temp = src; 
      else 
       temp = dst; 

      dst = new byte[temp.Length - search.Length + repl.Length]; 

      // before found array 
      Buffer.BlockCopy(temp, 0, dst, 0, index); 
      // repl copy 
      Buffer.BlockCopy(repl, 0, dst, index, repl.Length); 
      // rest of src array 
      Buffer.BlockCopy(
       temp, 
       index + search.Length, 
       dst, 
       index + repl.Length, 
       temp.Length - (index + search.Length)); 


      index = FindBytes(dst, search); 
     } 
     return dst; 
    } 
} 

使用法:ファイルが大きすぎると問題がある

byte[] allBytes = File.ReadAllBytes(@"your source file path"); 
byte[] oldbytePattern = new byte[]{49, 50}; 
byte[] newBytePattern = new byte[]{48, 51, 52}; 
byte[] resultBytes = BytePatternUtilities.ReplaceBytes(allBytes, oldbytePattern, newBytePattern); 
File.WriteAllBytes(@"your destination file path", resultBytes) 

を、そしてあなたが必要"ウィンドウイング"機能。多くのスペースを取るので、すべてのバイトをメモリにロードしないでください。

関連する問題