【问题标题】:FileSaveDialog with none existing path?具有不存在路径的文件保存对话框?
【发布时间】:2014-08-01 13:12:41
【问题描述】:

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

C:\Programs\FolderThatDoesntExist\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;
          }
    }

此方法始终由 Export 方法调用,并应确保创建目录。

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

【问题讨论】:

  • 您确定文件夹/文件确实存在吗?
  • 作为 Windows 的老用户,我的理解是不能以这种方式创建文件夹。至少,我以前从未做过。作为一名长期的 Windows 开发人员,我不希望这能真正起作用。想象一下您打算输入“C:\Programs\FolderThatDoesExist\Errors.txt”而不是“C:\Programs\FolderThatDoesntExist\Errors.txt”的情况,现在您的文件在某个您可能永远找不到的文件夹中关闭。
  • Ähm 是的,我知道您试图向我解释什么,您能向我的客户解释一下吗?我对此真的不满意!但这不是我的主意,我无法反驳他....请不要告诉我我必须编写自己的 FileSaveDialog :D
  • 您需要重新对齐客户端的视图。指出他们使用的所有其他程序的行为方式相同。如果他们不会被带过来,那么就发布一个带有文件对话框的程序,该对话框只是一个带有编辑控件的表单,他们可以在其中键入文件名。当他们意识到这是多么垃圾时,请他们做出选择。您不能期望编写自己的文件对话框并使其正常工作。

标签: c# io savefiledialog


【解决方案1】:

这是人们通常习惯的一般观念:

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

  2. 旁边有一个Browse 按钮(或简称为...),它会打开一个SaveFileDialog 并提示输入位置。

  3. 当您继续操作时,如果文件夹不存在,您可以警告您的用户并创建它,或者只是自动创建它。但我更喜欢前一种方法,因为它可以防止您的应用在出现拼写错误的情况下创建错误的文件夹。

或者,您可以提供FolderBrowserDialog 并让您的用户选择特定文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2016-12-28
    • 2013-07-06
    • 2011-08-23
    相关资源
    最近更新 更多