1

我希望能够将任何文件读入字符串,例如记事本打开 word 文件的方式。使用以下代码:

StreamReader sr = new StreamReader(filePath);
text += sr.ReadToEnd();
sr.Close();

在基本文本文件上工作正常,但是在说单词文件时使用它时,我只会得到一些奇怪的字符,而在记事本中打开同一个文件会显示整个文件、文本、特殊字符等。我将其用作一个文件放到一个文本框中。基本上,我希望获得与在记事本中打开任何文件时相同的输出。我应该改用什么?

4

3 回答 3

2

使用原始问题中的代码并打开文件,确实会显示整个流(在调试器中查看时) - 问题是这些二进制文件中的大多数都有空终止符(\0char),这将导致大多数查看者停止阅读内容的流。

如果您删除/转义,'\0'您将看到整个流,就像在记事本中一样。

例如:

string filePath = @"c:\windows\system32\calc.exe";
StreamReader sr = new StreamReader(filePath);
string text = sr.ReadToEnd();
sr.Close();

textBox1.Text = text.Replace('\0', ' ');

将 textbox1 添加到表单并亲自查看...您将看到整个流...

于 2013-01-19T17:58:03.180 回答
0

这应该为您提供所需的功能。首先使用 byte[] 读取文件

byte[] data = File.ReadAllBytes(fileName);

然后只需用 ascii 或其他方式对其进行编码。

string s = Encoding.ASCII.GetString(data);
于 2013-01-19T17:57:15.407 回答
-2

我假设您指的是写字板,它也包含在 Windows 中,而不是记事本。写字板除了显示基本的文本文件外,还知道解析和编辑 Word 文件(.DOCX,但奇怪的是不是旧的 .DOC 文件)、富文本格式文件 (.RTF) 和 OpenOffice 文档 (*.ODT) . 这并不是仅仅通过打开 Word 文件并显示其内容就可以随意实现的 - 写字板中有很多代码可以解析这些二进制数据并正确显示,更不用说编辑和再次保存它的代码了。

如果您需要从 Word 文件中检索数据,有几个编程选项,首先是使用Word API自动化 Word 应用程序本身。但是,此解决方案对于在服务器上运行,或者如果您需要在没有安装 Word 的地方打开它们是有问题的。

在这种情况下,您还有多种选择。对于扩展名为 .DOCX 的 2007 年后文档,您可以使用System.IO.Packaging命名空间来打开 DOCX 并提取其相关部分,但您需要了解其中的 XML 文件的语法。或者,你可以购买一个第三方库来为你做这件事,比如Aspose,我已经使用过并且很好。还有其他人在那里。

于 2013-01-19T17:50:11.970 回答