提问者:小点点

使用FolderBrowserDialog保存文件时出现问题


我有这个代码:

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文件夹中。

我的问题是为什么它不把文件保存在最后一个文件夹里?我该怎么修复它呢?


共2个答案

匿名用户

您不应将路径串联为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);

我没有注意到使用插入它们之间的+运算符会导致文件名和所选路径附加在一起。所以当两者分开时,文件就保存在选定的路径中。