2011-12-22 151 views
17

我改變了我的代碼,所以我可以打開一個文件爲只讀。現在我無法使用File.WriteAllText,因爲我的FileStreamStreamReader未轉換爲字符串。如何將StreamReader轉換爲字符串?

這是我的代碼:

static void Main(string[] args) 
{ 
    string inputPath = @"C:\Documents and Settings\All Users\Application Data\" 
        + @"Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt"; 
    string outputPath = @"C:\FAXLOG\OutboxLOG.txt"; 

    var fs = new FileStream(inputPath, FileMode.Open, FileAccess.Read, 
             FileShare.ReadWrite | FileShare.Delete); 
    string content = new StreamReader(fs, Encoding.Unicode); 

    // string content = File.ReadAllText(inputPath, Encoding.Unicode); 
    File.WriteAllText(outputPath, content, Encoding.UTF8); 
} 
+0

'StreamReader'不是'string'。使用你已經註釋掉的'File.ReadAllText'方法會得到一個'string'。 – 2011-12-22 16:29:15

+0

看起來您只是將文件的內容複製到另一個目錄。爲什麼不直接將文件複製到輸出目錄中? – docmanhattan 2011-12-22 16:30:04

+0

嗨,很高興您能夠對我上一篇文章的評論進行詳細說明......在您的FileStream上使用''也可以隨時嘗試/捕獲磁盤IO ......因爲您已經看,有很多潛在的問題。除此之外,這些StreamReader.ReadToEnd()答案是你所需要的。 – rfmodulator 2011-12-22 16:33:16

回答

39

使用的StreamReader的ReadToEnd的()方法:

string content = new StreamReader(fs, Encoding.Unicode).ReadToEnd(); 

它,當然,重要的訪問後關閉StreamReader的。因此,using聲明是有意義的,如keyboardP和其他人所建議的。

string content; 
using(StreamReader reader = new StreamReader(fs, Encoding.Unicode)) 
{ 
    content = reader.ReadToEnd(); 
} 
+8

我建議使用流'使用'語句。 – albertjan 2011-12-22 16:28:57

+0

並使用Path.Combine(...)而不是字符串連接,我知道。我從我的答案中刪除了噪音,只留下了更改的行 – Adam 2011-12-22 16:31:11

+3

因爲我的答案已被接受,所以我已將其擴展爲包含使用陳述,如@ keyboardP的答案中所述。 – Adam 2011-12-22 16:51:58

11
string content = String.Empty; 

using(var sr = new StreamReader(fs, Encoding.Unicode)) 
{ 
    content = sr.ReadToEnd(); 
} 

File.WriteAllText(outputPath, content, Encoding.UTF8); 
+3

+1用於添加使用語句配置StreamReader – Jason 2011-12-22 16:30:23

+1

的確的重要一點。 – Adam 2011-12-22 16:32:07

3

使用StreamReader.ReadToEnd()方法。