SaveFileDialog不保存文件名或路径

时间:2015-10-28 21:24:16

标签: c# winforms path filenames savefiledialog

我想使用SaveFileDialog,当点击Save按钮时,我想将文件名和路径保存到单独的变量中。这是代码:

 private void Button_Click(object sender, EventArgs e)
    {
        SaveFileDialog saveFileDialog1 = new SaveFileDialog();
        saveFileDialog1.FileName = "SaveFile";
        saveFileDialog1.DefaultExt = ".txt";
        saveFileDialog1.Filter = "Text Files (*.txt)|*.txt";
        saveFileDialog1.Title = "Save a Text File";
        saveFileDialog1.FileOk += saveFileDialog1_FileOk;
        saveFileDialog1.ShowDialog();
    }

    private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
    {
            string filename = System.IO.Path.GetFileName(saveFileDialog1.FileName);
            string name = saveFileDialog1.FileName;

            var test = System.IO.Path.GetDirectoryName(saveFileDialog1.FileName);
        }

对话框打开,它会触发saveFileDialog1_FileOk事件,但是我得到一个空字符串作为文件名,获取路径(没有文件名)的解决方案不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:2)

从MSDN(https://msdn.microsoft.com/de-de/library/system.windows.forms.savefiledialog(v=vs.110).aspx)检查此示例:

private void button1_Click(object sender, System.EventArgs e)
 {
     Stream myStream ;
     SaveFileDialog saveFileDialog1 = new SaveFileDialog();

     saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"  ;
     saveFileDialog1.FilterIndex = 2 ;
     saveFileDialog1.RestoreDirectory = true ;

     if(saveFileDialog1.ShowDialog() == DialogResult.OK)
     {
         if((myStream = saveFileDialog1.OpenFile()) != null)
         {
             // Code to write the stream goes here.
             myStream.Close();
         }
     }
 }

您只需要检查saveFileDialog1.ShowDialog()的返回值,以了解用户是否点击了确定。

然后,您可以使用包含所选文件路径的FileName属性。

编辑:要获取文件的文件夹路径,您可以使用:

string folderPath = new DirectoryInfo(saveFileDialog1.FileName).Name;

答案 1 :(得分:2)

您遇到的主要问题是使用SaveFileDialog的2个实例。

您显示一个对话框,然后尝试从另一个显然为空的对话框中读取File

请注意,在按钮单击中,您正在创建一个新的本地实例并显示它,然后在FileOk中您正在使用另一个似乎是表单级别成员的实例。

修复1: 您只需删除SaveFileDialog saveFileDialog1 = new SaveFileDialog();,因为您似乎已将saveFileDialog1作为表单的成员。

修复2: 您可以这样使用SaveFileDialog

var sfd= new SaveFileDialog();
//Other initializations ...
//sfd.Filter= "Text files (*.txt)|*.txt|All files (*.*)|*.*";
//sfd.DefaultExt = "txt";

if(sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    MessageBox.Show(sfd.FileName);
    //ِDo something for save
}
else
{
    //Do something for cancel if you want
}

然后,您可以使用FileName属性访问所选文件,例如MessageBox.Show(sfd.FileName);