我有这个代码:
private void button1_Click(object sender, EventArgs e)
{
string x = "Name: " + label1.Text + " " + "FamilyName: " + label2.Text + " " + "FatherName: " + label3.Text + " " + "PhoneNumber: " + label4.Text;
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
if (radioButton1.Checked == true)
{
System.IO.File.WriteAllText(folderBrowserDialog1.SelectedPath + label1.Text + ".txt", x);
MessageBox.Show("The file registered.");
}
else if (radioButton2.Checked == true)
{
System.IO.File.WriteAllText(folderBrowserDialog1.SelectedPath + label1.Text + ".doc", x);
MessageBox.Show("The file registered.");
}
else
{
MessageBox.Show("Please choose one of the formats.");
}
}
}
这是为了将标签中的一些信息存储在文件中,并从label1
中动态地选择文件名。然后我放了一个单选按钮来选择将文件保存为txt格式还是文档格式。选择其中一种格式并单击Save按钮后,FolderBrowserDialog/Code>将打开,我可以选择要在那里保存文件的路径。但是当我选择路径时,假设我选择了这个路径:'g:\SavingFile\TextFiles',而不是将文件保存在TextFiles文件夹中,而是将其保存在SavingFile文件夹中。
我的问题是为什么它不把文件保存在最后一个文件夹里?我该怎么修复它呢?
您不应将路径串联为string,而应使用System.IO.Path.Combine。因为这还将处理正确的路径分隔符,因为SelectedPath
没有以路径分隔符结尾,所以代码中缺少这些分隔符
所以在你的情况下
var filepath = System.IO.Path.Combine(folderBrowserDialog1.SelectedPath, label1.Text + ".txt");
System.IO.File.WriteAllText(filepath, ....);
这将处理所需的路径分隔符。
如果您正在使用。NET Core,则还可以使用System.IO.Path.Join。但是请注意,这两种方法在生成结果路径的行为上存在一些差异。详见链接文档。
我在代码上放了一个消息框
,并查看了保存此文件的路径。我注意到lable1
中的文件名与最后一个文件夹的名称混在一起。并且由于这个原因,文件将不会保存在我选择的最后一个文件夹中。所以我简单地在标签和获取文件路径的部分之间放了一个双反斜杠。像这样:
System.IO.File.WriteAllText(folderBrowserDialog1.SelectedPath + "\\" + label1.Text + ".txt", x);
我没有注意到使用插入它们之间的+
运算符会导致文件名和所选路径附加在一起。所以当两者分开时,文件就保存在选定的路径中。