C# 流、字符串和空字符

C# 流、字符串和空字符,c#,string,stream,windows-runtime,C#,String,Stream,Windows Runtime,我有一个流,其中包含几个\0。我必须替换这个流的文本部分,但是当我 StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); text仅包含流的开头(因为\0字符)。所以 由于我不解析“完整”流,因此无法完成预期的工作。你知道如何访问完整数据并替换一些文本部分吗 编辑:我在记事本上看到的示例 stream H‰­—[oã6…ÿÛe)Rêq%ÙrlËñE±“-úàÝE[,’íKÿþŽDjxÉ

我有一个流,其中包含几个
\0
。我必须替换这个流的文本部分,但是当我

StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();
text
仅包含流的开头(因为
\0
字符)。所以

由于我不解析“完整”流,因此无法完成预期的工作。你知道如何访问完整数据并替换一些文本部分吗

编辑:我在记事本上看到的示例

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

我不能复制你的结果。下面的代码创建了一个字符串,其中包含一个
\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”);

啊,现在我们开始讨论它了

这个文件是pdf格式的


然后它不是文本文件。这是一个二进制文件,应该被视为二进制文件。在其上使用
StreamReader
将丢失数据。您需要使用不同的API来访问其中的数据-一个理解PDF格式的API。请查看或。

不,
ReadToEnd
不使用
\0
作为“流结束”“字符。您的诊断可能会被它搞砸。请尝试打印长度。这些数据来自何处,是否真的包含这些字符?是否可能您只是使用了错误的编码?我承认我不知道这些字符是否存在。我只是怀疑它。事实是,
ReadToEnd()
没有给我完整的文件文本。这个文件是一个pdf,其中包含
流…endstream
partsAh,对。希望你一开始就这么说。看看我的答案。@NicolasVoron:你打算用这个pdf做什么?向用户展示它?提取文本?@Brian我试图阅读的pdf是一个排序模板。我想修改其中的一些标记。没有问题播放或文本提取,只需替换记事本上可见的一些已知标记值(请参见我的编辑)。因此,正如@jonskeet所说,这不是阻止我的\0。我将编辑我的帖子。听起来iTextSharp不是为Metro风格的应用程序设计的,可能依赖于Metro风格的应用程序无法使用的.Net framework部分。事实上,此文件是文本和二进制文件的组合。没有其他方法修改它吗?@NicolasVoron:如果它是PDF,那么是的,它是文本内容和二进制文件的混合体——但是你需要了解文件格式才能使用它。如果iTextSharp不适合你,那就找一个可以使用的库——但不要只想使用专为纯文本设计的
StreamReader
。@NicolasVoron:have just添加了一个到PDFTron的链接,这可能更合适。谢谢你,Jon。PDFTron不是免费的,但我会再搜索一个。@NicolasVoron:你从来没有说过它必须是免费的:)听起来好像有很多限制,一开始就没有明确提到。(例如,很容易漏掉标记。如果您知道一个不寻常的要求,最好在问题中说明。)我不会惊讶地发现目前没有适合WinRT的好PDF库。
        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"