Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有现有路径的文件保存对话框?_C#_Io_Savefiledialog - Fatal编程技术网

C# 没有现有路径的文件保存对话框?

C# 没有现有路径的文件保存对话框?,c#,io,savefiledialog,C#,Io,Savefiledialog,我在使用SaveFileDialog处理IO时遇到问题。正如您将在下面的解决方案中看到的,我打开对话框,并尝试使用ExportTXT/ExportCSV方法保存文件。现在的问题是,像在资源管理器中一样,直接在对话框中键入路径: C:\Programs\FolderThatDoesnTextist\Errors.txt 我总是会收到警告:路径不可用。请检查并重试 我真的不明白,因为: dlg.CheckPathExists = false; property is set to fa

我在使用SaveFileDialog处理IO时遇到问题。正如您将在下面的解决方案中看到的,我打开对话框,并尝试使用ExportTXT/ExportCSV方法保存文件。现在的问题是,像在资源管理器中一样,直接在对话框中键入路径:

C:\Programs\FolderThatDoesnTextist\Errors.txt

我总是会收到警告:路径不可用。请检查并重试

我真的不明白,因为:

   dlg.CheckPathExists = false;

   property is set to false!

    private void ExportToFile_Click(object sender, EventArgs e)
    {
         SaveFileDialog dlg = new SaveFileDialog();
         dlg.FileName = "Errors"; // Default file name
         dlg.DefaultExt = ".csv"; // Default file extension
         dlg.OverwritePrompt = true;
         dlg.CheckPathExists = false;
         dlg.AddExtension = true;
         dlg.Filter = "CSV Files (*.csv)|*.csv|Text documents (.txt)|*.txt"; // Filter files by extension
         dlg.FileOk += dlg_FileOk;
         // Show save file dialog box
         dlg.ShowDialog();
    }

    void dlg_FileOk(object sender, CancelEventArgs e)
    {
         // Process save file dialog box results
         var extension = Path.GetExtension(((SaveFileDialog)sender).FileName);
         switch (extension.ToLower())
         {
             case ".txt":
                  exportTXT(((SaveFileDialog)sender).FileName);
                  break;
             case ".csv":
                  exportCSV(((SaveFileDialog)sender).FileName);
                  break;
             default:
                  exportTXT(((SaveFileDialog)sender).FileName);
                  break;
          }
    }
导出方法始终调用此方法,并应确保创建目录

    private void checkDir(string filename)
    {
         string path = Path.GetDirectoryName(filename);
         if (!Directory.Exists(path))  // if it doesn't exist, create
         {
             Directory.CreateDirectory(path);
         }
    }

这是人们通常习惯的总体想法:

  • 有一个文本框,用户可以通过键入、粘贴或其他方式输入路径

  • 旁边有一个
    Browse
    按钮(或简单的
    ),它会打开一个
    保存文件对话框
    ,并提示输入位置

  • 继续操作时,如果文件夹不存在,您可以警告用户并创建它,或者直接自动创建它。但我更喜欢前一种方法,因为它可以防止你的应用程序在输入错误时创建错误的文件夹


  • 或者,您可以提供一个
    FolderBrowser对话框
    ,让您的用户选择一个特定的文件夹。

    您是否确保文件夹/文件确实存在?作为Windows的长期用户,我的理解是,您不能以这种方式创建文件夹。至少,我以前从未做过。作为一名长期的Windows开发人员,我不认为这会真正起作用。想象一下,如果你想输入“C:\Programs\FolderThatDoesExist\Errors.txt”而不是“C:\Programs\FolderThatDoesTextist\Errors.txt”,现在你的文件被放在一个你可能永远找不到的文件夹中。嗯,是的,我知道你想向我解释什么,你能向我的客户解释一下吗?我真的不高兴!但这不是我的主意,我也不能反驳他。。。。请不要告诉我我必须编写一个自己的FileSaveDialog:你需要重新调整客户端的视图。指出他们使用的所有其他程序都以相同的方式运行。如果他们不被邀请,可以发送一个带有文件对话框的程序,该对话框只是一个带有编辑控件的表单,他们可以在其中键入文件名。当他们意识到这是多么垃圾时,请他们做出选择。您不能期望编写自己的文件对话框并使其正常工作。