2013-01-19 26 views
1

我希望能夠將任何文件讀入字符串,例如記事本打開文件的方式。使用下面的代碼:如何將任何文件讀入字符串

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

正常工作的一個基本的文本文件,但使用上說,當一個字的文件我只是得到了幾個奇怪的字符,而在記事本中打開相同的文件顯示我整個文件,文本,特殊字符等。我將它用作文件放入文本框的一部分。基本上,我希望獲得與在記事本中打開任何文件時相同的輸出。我應該用什麼來代替?

+0

你是想提取文本(有或沒有格式化)從Word(.doc,.docx)文件?你確定記事本沒有顯示特殊字符嗎? –

+0

我不介意看到特殊字符,我想要一個包羅萬象的方式來打開任何文件,而不是單詞。你可以在記事本中打開幾乎任何文件。 – RedEyedMonster

+0

例如,當你打開一個二進制exe文件時,你期望看到什麼? – Blachshma

回答

2

從原來的問題使用你的代碼,並打開文件,顯示整個流(在調試器中尋找它的時候) - 問題是,大多數二進制文件都空終結(\0字符)這將導致大多數觀衆停止閱讀流的內容。

如果您刪除/轉義'\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中的表格,看看自己......你會看到整個流...

+0

就是這樣!很棒,謝謝 – RedEyedMonster

-2

我假設您指的是寫字板,它也包含在Windows中,而不是記事本。除了顯示基本文本文件之外,寫字板還知道解析和編輯Word文件(.DOCX,但奇怪的是不是舊的.DOC文件),RTF格式文件(.RTF)和OpenOffice文檔(* .ODT) 。這不僅僅是通過打開Word文件並顯示它的內容而自由發揮 - 寫字板內部有很多代碼來解析這些二進制數據並正確顯示它,更不用說編輯和再次保存它的代碼。

如果您需要從Word文件中檢索數據,有幾個編程選項,首先使用Word APIs自動執行Word應用程序本身。但是,此解決方案對於在服務器上運行存在問題,或者如果您需要在沒有安裝Word的情況下打開它們。

在這種情況下,您也有幾個選項。對於帶有.DO​​CX擴展名的2007年後文檔,您可以使用System.IO.Packaging命名空間打開DOCX並提取其相關部分,但是您需要了解其中的XML文件的語法。或者,您可以購買一個第三方庫,可以爲您做到這一點,例如Aspose,我曾與之合作過,並且沒有問題。還有其他人也在那裏。

+0

不,我的意思是記事本,如果你右鍵點擊幾乎所有的文件,並選擇打開記事本,它會打開大多數文件。我接受通常有很多難以辨認的特殊字符,但那是我想要的輸出。我只是用一個詞作爲例子。 – RedEyedMonster

0

這應該給你你想要的功能。首先閱讀文件在一個字節[]使用

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

然後只是用ascii或任何其他編碼。

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

這會遇到與使用StreamReader相同的問題,您仍然需要刪除上面顯示的空終止符。 – RedEyedMonster

相關問題