3

その中にいくつかを含むストリームがあります\0。このストリームのテキスト部分を置き換える必要がありますが、そうすると

StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();

textストリームの先頭のみが含まれます (\0文字のため)。そう

text = text.Replace(search, replace);
StreamWriter writer = new StreamWriter(stream);
writer.Write(text);

「完全な」ストリームを解析しないため、期待される仕事をしません。完全なデータにアクセスして、いくつかのテキスト部分を置き換える方法について何か考えはありますか?

編集:メモ帳に表示されるものの例

stream
H‰­—[oã6…ÿÛe)Rêq%ÙrlËñE±“-úàÝE[,’íKÿþŽDjxÉ6ŒÅ"XkÏáGqF   að÷óð!SN>¿¿‰È†/$ËÙpñ<^HVÀHuñ'¹¿à»U?`äŸ?
¾fØø(Ç,ükøéàâ+ùõ7øø2ÜTJ«¶Ïäd×SÿgªŸF_ß8ÜU@<Q¨|œp6åâ-ªÕ]³®7Ûn¹ÚÝ|‰,¨¹^ãI©…Ë&lt;UIÐI‡Û©* Ǽ,,ý¬5O->qä›Ü
endstream 
endobj
8 0 obj
<<
/Type /FontDescriptor
/FontName /Verdana
/Ascent 765
/Descent -207
/CapHeight 1489
/Flags 32
/ItalicAngle 0
/StemV 86
/StemH 0
/FontBBox [ -560 -303 1523 1051 ]
/FontFile2 31 0 R
>>
endobj
9 0 obj

たとえば、その場で置き換えたいとし/FontName /Verdanaます。/FontName /Arial

4

2 に答える 2

2

あなたの結果を複製することはできません。以下のコードは、a を含む文字列を作成し、\0ファイルに書き込み、それを読み戻します。結果の文字列には次のものが含ま\0れます。

        string s = "hello\x0world";
        File.WriteAllText("foo.txt", s);
        string t;
        using (var f = new StreamReader("foo.txt"))
        {
            t = f.ReadToEnd();
        }
        Console.WriteLine(t == s);  // prints "True"

実行しても同じ結果が得られますvar t = File.ReadAllText("foo.txt");

于 2013-08-06T15:04:16.400 に答える