【发布时间】:2013-08-07 16:03:56
【问题描述】:
我有一个包含多个\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。
【问题讨论】:
-
不,
ReadToEnd不使用\0作为“流结束”字符。不过,您的诊断可能会被搞砸。尝试打印长度。这些数据是从哪里来的,它应该真的包含这些字符吗?有没有可能你只是使用了错误的编码? -
我承认我真的不知道这些字符是否存在。我只是怀疑它。事实是,
ReadToEnd()没有给我完整的文件文本。此文件为包含stream ... endstream部分的 pdf -
啊,对。希望你一开始就这么说。看我的回答。
-
@NicolasVoron:你打算用 PDF 做什么?显示给用户?提取文本?
-
@Brian 我尝试阅读的 pdf 是一个排序模板。我想修改其中的一些标签。没有显示或文本提取,只需替换记事本上可见的一些已知标签值(参见我的编辑)。
标签: c# string stream windows-runtime