Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将任何文件读入字符串_C#_String_Streamreader - Fatal编程技术网

C# 如何将任何文件读入字符串

C# 如何将任何文件读入字符串,c#,string,streamreader,C#,String,Streamreader,我希望能够将任何文件读入字符串,例如记事本打开word文件的方式。使用以下代码: StreamReader sr = new StreamReader(filePath); text += sr.ReadToEnd(); sr.Close(); 在基本文本文件上可以很好地工作,但是当在word文件上使用它时,我只会得到一些奇怪的字符,而在记事本中打开同一个文件会显示整个文件、文本、特殊字符等。我使用它作为文件的一部分,将其放入文本框中。基本上,我希望得到与在记事本中打开任何文件时相同的输出。我

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

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

在基本文本文件上可以很好地工作,但是当在word文件上使用它时,我只会得到一些奇怪的字符,而在记事本中打开同一个文件会显示整个文件、文本、特殊字符等。我使用它作为文件的一部分,将其放入文本框中。基本上,我希望得到与在记事本中打开任何文件时相同的输出。我应该用什么来代替呢?

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

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


在这种情况下,您还有几个选项。对于扩展名为.DOCX的2007年后文档,您可以使用名称空间打开DOCX并提取其相关部分,但您需要了解其中XML文件的语法。或者,您可以购买一个第三方库来为您完成这项工作,例如,我曾经使用过并且还不错。还有其他功能。

这将为您提供所需的功能。首先使用将文件作为字节[]读入

byte[] data = File.ReadAllBytes(fileName);
然后用ascii码或其他什么编码

string s = Encoding.ASCII.GetString(data);

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

如果删除/转义
'\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添加到表单中,然后自己查看。。。您将看到整个流…

您是否试图从Word(.doc、.docx)文件中提取文本(带格式或不带格式)?你确定记事本不会显示特殊字符吗?我不介意看到特殊字符,我想要一种全方位的方式来打开任何文件,而不仅仅是word。你可以在记事本中打开几乎任何文件的方式。例如,当你打开一个二进制exe文件时,你希望看到什么?不是所有的文件都以相同的编码存储,所以没有一种方法可以以你希望看到的方式打开每一个文件。我希望有一大堆特殊字符。没关系。我是说记事本,如果你右键点击几乎任何文件并选择“用记事本打开”,它将打开大多数文件。我承认经常有很多无法辨认的特殊字符,但这就是我想要的输出。我使用word只是一个例子。这与使用StreamReader时遇到的问题相同,您仍然需要删除空终止符,如上所示。