当用户在“另存为”对话框中指定位置时,如何将文本写入文件?

Posted

技术标签:

【中文标题】当用户在“另存为”对话框中指定位置时,如何将文本写入文件?【英文标题】:How do I write text to file when user specifies the location in a SaveAsDialog? 【发布时间】:2019-08-26 20:26:45 【问题描述】:

我想在用户指定保存位置时将文本写入文件,但这会不断返回有关不受支持的文件路径的异常。在哪里可以找到文件路径?

private void SaveAs_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)
        
            string createText = "Hello and Welcome" + Environment.NewLine;

            string path = saveFileDialog1.ToString();
            File.WriteAllText(path, createText);
            myStream.Close();
        
     

【问题讨论】:

或者你使用 File.WriteAllText 或者你使用 SaveFileDialog 中的 OpenFile。你需要选择一个 你必须写信给myStreamsaveFileDialog1.ToString(); 没有任何意义。您将只获得对象名称。或使用FileDialog.FileName 并以您想要的方式在那里写。 我建议学习如何调试您的代码。在string path = saveFileDialog1.ToString(); 上设置断点,看看path 实际解析到什么。或者 Console.Write 到控制台看看。最终的路径可能会让您感到惊讶 不能夸大调试的重要性。这次其他人可以查看您的代码并发现问题。下次他们就不能了。没有它,写代码就不难了。这将是不可能的。另外,单元测试。这与这个问题无关 - 只是一个 PSA。这个:Navigate through code with the Visual Studio debugger @ĴošħWilliard 对此表示感谢。诚然,我没有以传统方式进行足够的调试,bc VS 大部分时间都向我展示了问题所在。我的帖子可能也不是很清楚,因为我认为我不太擅长解释事情,但我很清楚这些行:字符串路径...和 ​​File.WriteAllText... 是完全错误的。尽管如此,我在排除了几乎一整天的故障后放弃了这个,只是找到了另一种效果很好的方法。无论如何谢谢。 【参考方案1】:

要获取在SaveFileDialog 中选择的路径,您无需对其调用ToString(),而是使用FileName 属性。

这是一个简单的例子:

string path = saveFileDialog1.FileName;
File.WriteAllText(path, createText);

SaveFileDialog Docs

【讨论】:

我得到的只是:System.IO.IOException: '进程无法访问文件'C:\...',因为它正被另一个进程使用。' 这是一个不同的问题。最初的问题是您尝试写入的路径并不是真正的路径。它类似于“System.Windows.Forms.SaveFileDialog”。现在的问题是文件已打开。检查您是否在记事本中打开了它。 @ScottHannen 我刚刚创建了它。如何在另一个应用程序中打开它? 检查是否有任何程序打开编辑文件,如果没有,请重新启动电脑并重试。另外,如果你使用File.Create,它实际上并没有关闭文件,它保持锁定状态。 已经描述:或者你使用SaveFileDialog.OpenFile()返回的流或者你使用SaveFileDialog.FileName。非此即彼。两者都不是。

以上是关于当用户在“另存为”对话框中指定位置时,如何将文本写入文件?的主要内容,如果未能解决你的问题,请参考以下文章

按钮显示另存为对话框,然后保存到设置的位置

我想在用户右键单击时更改另存为对话框文件名

如何使用Word模板

程序中的对话框应用- ”另存为“对话框

如何保存不另存为

如何使浏览器显示“另存为对话框”,以便用户可以将字符串的内容保存到他系统上的文件中?