У меня проблема с сохранением файла с помощью folderbrowserialog

#c# #winforms

#c# #winforms

Вопрос:

У меня есть этот код:

 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 или формате doc. После выбора одного из форматов и нажатия кнопки Сохранения folderBrowserDialog откроется окно, чтобы я мог выбрать путь, по которому я хочу сохранить свой файл. Но когда я выбрал свой путь, допустим, я выбрал этот путь: ‘G:SavingFileTextFiles ‘, вместо того чтобы сохранять файл в папке TextFiles, сохраните его в папке SavingFile.

Мой вопрос в том, почему он не сохраняет файл в последней папке? И как я могу это исправить?

Комментарии:

1. В качестве примечания, вы не сохраняете этот текст в двух разных форматах , вы сохраняете один и тот же текстовый формат в файлах с двумя разными расширениями.

Ответ №1:

Вы не должны объединять свои пути в виде строки, а использовать System.IO.Path.Вместо этого объедините. поскольку это также позаботится о правильных разделителях путей, которые отсутствуют в вашем коде, поскольку SelectedPath не заканчиваются разделителем путей

Итак, в вашем случае

 var filepath = System.IO.Path.Combine(folderBrowserDialog1.SelectedPath, label1.Text    ".txt");
System.IO.File.WriteAllText(filepath, ....);
  

Это позаботится о необходимых разделителях путей.

Если вы используете .Net Core, вы также можете использовать System.IO.Path.Join. Но имейте в виду, что есть некоторые различия в поведении этих двух методов в отношении укоренения результирующего пути. Подробности см. в связанных документах.

Ответ №2:

Я также нашел другой способ сохранения своих файлов, который проще, чем способ, который я сделал выше. Я могу просто использовать saveFileDialog .

 if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    System.IO.File.WriteAllText(saveFileDialog1.FileName, x);
}