我有一个包含多个\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©…Ë<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
。
答案 0 :(得分:2)
我无法复制您的结果。下面的代码创建一个字符串,其中包含\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");
答案 1 :(得分:2)
啊,现在我们已经开始......
此文件为pdf
然后它不是文本文件。这是一个二进制文件,应该处理作为二进制文件。在其上使用StreamReader
将丢失数据。您需要使用不同的API来访问其中的数据 - 一个了解PDF格式的数据。请查看iTextSharp或PDFTron。