2013-02-04 62 views
0

我是新来的c#,我有一个问题,可能有一个非常简单的解决方案。我想导入一个.txt文件以便查看文本框并保持原始文件的格式(所有正确的间距)。这可能吗?当用户单击按钮并显示文件时,我正在使用以下代码打开.txt文件。再次,我对编程非常陌生,任何帮助都将不胜感激。显示.txt文件时保持格式

OpenFileDialog ofd = new OpenFileDialog(); 

ofd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 

if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    StreamReader sr = File.OpenText(ofd.FileName); 
    string s = sr.ReadLine(); 
    StringBuilder sb = new StringBuilder(); 
    while (s != null) 
    { 
     sb.Append(s); 
     s = sr.ReadLine(); 
    } 
    sr.Close(); 
    textBox1.Text = sb.ToString(); 
} 
+2

为什么空间会消失?使用'ReadToEnd'而不是逐行阅读和字符串生成器更容易。这将您的代码变成两个班轮。我想你也需要一个“使用”。 –

+1

你现在的代码有什么问题? – Blachshma

+0

你的文本框的大小是多少?以及文本文件中的最大行长度是多少? –

回答

2

我认为,你应该使用的

sb.AppendLine(); 

代替sb.Append();

现在,你可以(应该)也使用ReadToEnd(),由大卫·赫弗南的建议。

using(StreamReader sr = File.OpenText(ofd.FileName)) { 
    textBox1.Text = sr.ReadToEnd(); 
} 
+0

太棒了!我取代了sb.Append();与sb.AppendLine();按照建议,我得到了我正在寻找的结果。非常感谢你。 – user2029074

1

我相信你是这样想的。没有必要使用循环,并且框架已经提供了完全按照您的要求进行的便利方法。

我会写这样的代码:

using (StreamReader sr = new StreamReader(ofd.FileName)) 
{ 
    textBox1.Text = sr.ReadToEnd(); 
} 

我猜你的有关保留的间距是由一个事实,即你的循环不会保留换行符动机问题。这是使用内置框架的另一个原因。让它承受紧张并获得正确的细节。

+0

谢谢你们的帮助。 sb.AppendLine();和 使用(StreamReader sr = new StreamReader(ofd.FileName)) { textBox1.Text = sr.ReadToEnd(); } 给了我想要的结果。 – user2029074

+0

好。在你的程序中选择使用哪种解决方案应该是显而易见的! –