我在C#中编写了一个使用openfiledialog的winforms程序。我希望它能够获取用户选择的文件并将其作为文本打开,而不管文件类型如何。
我试过这样:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = Process.Start("notepad.exe", openFileDialog1.ToString()).ToString();
}
然而,这不起作用,我不确定我是否在正确的轨道上。
答案 0 :(得分:3)
您应该使用此代码:
首先添加此命名空间:
using System.IO;
然后将此代码添加到您的函数中:
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
if (openFileDialog.ShowDialog()== DialogResult.OK)
{
textBox1.Text = File.ReadAllText(openFileDialog.FileName);
}
答案 1 :(得分:1)
要使用记事本打开文件,您需要将文件名作为Start
方法的第二个参数传递。例如:
using (var ofd = new OpenFileDialog())
{
if(ofd.ShowDialog()== DialogResult.OK)
{
System.Diagnostics.Process.Start("notepad.exe", ofd.FileName);
}
}
此外,如果出于任何原因知道并非所有文件内容都是文本,您将自己阅读文件内容:
using (var ofd = new OpenFileDialog())
{
if(ofd.ShowDialog()== DialogResult.OK)
{
var txt = System.IO.File.ReadAllText(ofd.FileName);
}
}
答案 2 :(得分:0)
您目前正在做的是使用参数Process
启动openFileDialog1.ToString()
,在流程上调用ToString()
并将其设置为TextBox中的文本。如果路径有效,结果可能类似于“System.Diagnostics.Process”。但是,由于您使用openFileDialog1.ToString()
作为路径,您的应用程序可能会因文件未找到错误而崩溃。
要获取OpenFileDialog
的选定文件,请使用openFileDialog1.FileName
。 (参见文档here)
我认为您真正想要做的是从文件中读取并将其内容作为文本写入TextBox。要执行此操作,您需要StreamReader
,如下所示:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
using(var reader = new StreamReader(openFileDialog1.FileName))
{
textBox1.Text = reader.ReadToEnd();
}
}
这样,您使用StreamReader打开文件,读取其内容,然后将它们分配给文本框。
using
语句存在,因为在您完成StreamReader
之后需要将其处理掉,以便不再使用该文件并释放所有资源。 using语句会自动为您执行此操作。