如何从 openfiledialog 读取文件路径到包含文件的数组
How to read a filepath from a openfiledialog to an array of the containing file
我想使用 2 个不同的按钮。为用户打开一个打开文件对话框的一个按钮 select 某个文件,然后他们可以单击生成按钮使用文件 selected 将其所有内容添加到数组中。
如何让该文件路径在 System.IO.ReadAllLines(filepath)
中工作
我有打开文件对话框的代码:
private void btnChoose_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog1.Filter = "Text Files (.txt)|*.txt";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Multiselect = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string sFileName = openFileDialog.FileName;
string[] arrAllFiles = openFileDialog.FileNames;
txtScriptfile.Text = arrAllFiles[0];
}
}
这里我想在读取所有行时使用文件路径:
private void btnGenerate_Click(object sender, EventArgs e)
{
string sThirdID = "";
string sSiteName = "";
string sFile = "";
FilePathScript = "@\"" + txtScriptfile.Text + "\"";
FilePathSite = "@\"" + txtSiteFile.Text +"\"";
FilePathDestinationFolder = "@\"" + txtdestinationFolder.Text + "\"";
txtScriptfile.Text = FilePathScript;
txtSiteFile.Text = FilePathSite;
txtdestinationFolder.Text = FilePathDestinationFolder;
string[] Scriptlines = System.IO.File.ReadAllLines(FilePathScript);
string[] Sitelines = System.IO.File.ReadAllLines(FilePathSite);
您需要一个文件,而不是多个文件,因此删除 Multiselect=true
或设置 Multiselect=false
。对于单个 select,您希望将 openFileDialog.FileName
存储在您的文本控件中...清理其余的 Choose_Click
。
Generate_Click
在某些方面有点乱,但实际上接近您想要的:您对 sThirdID
、sSiteName
和 [=17= 什么都不做],所以摆脱他们。您对文件名的处理有点混乱:在处理字符串文字时,您必须用前后双引号来表示它们;您还必须采取特殊步骤来处理或 "escape" 反斜杠,除非您使用特殊符号在整个字符串文字前面加上 @
字符,表示 verbatim string。但是,文本框中的文件名应该由用户 select 从系统“打开”对话框中设置,因此不需要对它们进行额外处理。
所以让我们取一个您提供了最详细信息的文件名并查看它,txtScriptFile.Text
:如果您将这个文件名直接传递给 File.ReadAllLines()
,它应该 return 字符串数组,就像你写的那样...... 提供 用户 select 在程序 运行 时编辑了一个有效的文本文件(例如,一个例如,该项目的源代码文件)。
那么接下来的事情就是,加载文件后,您将如何处理字符串数组?如果不以某种方式显示程序的结果,将很难验证您是否成功完成了任务。
我想使用 2 个不同的按钮。为用户打开一个打开文件对话框的一个按钮 select 某个文件,然后他们可以单击生成按钮使用文件 selected 将其所有内容添加到数组中。
如何让该文件路径在 System.IO.ReadAllLines(filepath)
我有打开文件对话框的代码:
private void btnChoose_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog1.Filter = "Text Files (.txt)|*.txt";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Multiselect = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
string sFileName = openFileDialog.FileName;
string[] arrAllFiles = openFileDialog.FileNames;
txtScriptfile.Text = arrAllFiles[0];
}
}
这里我想在读取所有行时使用文件路径:
private void btnGenerate_Click(object sender, EventArgs e)
{
string sThirdID = "";
string sSiteName = "";
string sFile = "";
FilePathScript = "@\"" + txtScriptfile.Text + "\"";
FilePathSite = "@\"" + txtSiteFile.Text +"\"";
FilePathDestinationFolder = "@\"" + txtdestinationFolder.Text + "\"";
txtScriptfile.Text = FilePathScript;
txtSiteFile.Text = FilePathSite;
txtdestinationFolder.Text = FilePathDestinationFolder;
string[] Scriptlines = System.IO.File.ReadAllLines(FilePathScript);
string[] Sitelines = System.IO.File.ReadAllLines(FilePathSite);
您需要一个文件,而不是多个文件,因此删除 Multiselect=true
或设置 Multiselect=false
。对于单个 select,您希望将 openFileDialog.FileName
存储在您的文本控件中...清理其余的 Choose_Click
。
Generate_Click
在某些方面有点乱,但实际上接近您想要的:您对 sThirdID
、sSiteName
和 [=17= 什么都不做],所以摆脱他们。您对文件名的处理有点混乱:在处理字符串文字时,您必须用前后双引号来表示它们;您还必须采取特殊步骤来处理或 "escape" 反斜杠,除非您使用特殊符号在整个字符串文字前面加上 @
字符,表示 verbatim string。但是,文本框中的文件名应该由用户 select 从系统“打开”对话框中设置,因此不需要对它们进行额外处理。
所以让我们取一个您提供了最详细信息的文件名并查看它,txtScriptFile.Text
:如果您将这个文件名直接传递给 File.ReadAllLines()
,它应该 return 字符串数组,就像你写的那样...... 提供 用户 select 在程序 运行 时编辑了一个有效的文本文件(例如,一个例如,该项目的源代码文件)。
那么接下来的事情就是,加载文件后,您将如何处理字符串数组?如果不以某种方式显示程序的结果,将很难验证您是否成功完成了任务。