バイナリファイルがあります(つまり、0x00から0xFFまでの値のバイトが含まれています)。ファイルには、正規表現を使用して検索および編集したいASCII文字列(「HelloWorld」など)もあります。次に、編集したファイルを、古いファイルとまったく同じになるように書き出す必要がありますが、ASCII編集が実行されています。どのように?
byte[] inbytes = File.ReadAllBytes(wfile);
string instring = utf8.GetString(inbytes);
// use Regex to find/replace some text within instring
byte[] outbytes = utf8.GetBytes(instring);
File.WriteAllBytes(outfile, outbytes);
編集をしなくても、出力ファイルと入力ファイルが異なります。何が起こっているのですか、そしてどうすれば私がやりたいことをすることができますか?
編集:わかりました、私は提供された提案を使用しようとしていますが、実際にそれを実装する方法を理解するのに苦労しています。これが私のサンプルコードです:
string infile = @"C:\temp\in.dat";
string outfile = @"C:\temp\out.dat";
Regex re = new Regex(@"H[a-z]+ W[a-z]+"); // looking for "Hello World"
byte[] inbytes = File.ReadAllBytes(infile);
string instring = new SoapHexBinary(inbytes).ToString();
Match match = re.Match(instring);
if (match.Success)
{
// do work on 'instring'
}
File.WriteAllBytes(outfile, SoapHexBinary.Parse(instring).Value);
もちろん、そのようにするとマッチが得られないことはわかっていますが、正規表現を文字列(またはその他)に変換すると、マッチなどを使用できなくなります。何かアイデアはありますか?ありがとう!