如何使用 openfiledialog 在 C# 中以文本形式打开任何文件?
How to use openfiledialog to open any file as text in C#?
我正在用 C# 编写一个使用 openfiledialog 的 winforms 程序。我希望它能够获取用户选择的文件并将其作为文本打开,而不管文件类型如何。
我这样试过:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = Process.Start("notepad.exe", openFileDialog1.ToString()).ToString();
}
然而,这没有用,我不确定我是否走在正确的轨道上。
要使用记事本打开文件,您需要将文件名作为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);
}
}
您现在正在做的是使用参数 openFileDialog1.ToString()
启动 Process
,在进程中调用 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 语句会自动为您执行此操作。
您应该使用此代码:
首先添加这个命名空间:
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);
}
我正在用 C# 编写一个使用 openfiledialog 的 winforms 程序。我希望它能够获取用户选择的文件并将其作为文本打开,而不管文件类型如何。
我这样试过:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = Process.Start("notepad.exe", openFileDialog1.ToString()).ToString();
}
然而,这没有用,我不确定我是否走在正确的轨道上。
要使用记事本打开文件,您需要将文件名作为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);
}
}
您现在正在做的是使用参数 openFileDialog1.ToString()
启动 Process
,在进程中调用 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 语句会自动为您执行此操作。
您应该使用此代码:
首先添加这个命名空间:
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);
}