当用户在“另存为”对话框中指定位置时,如何将文本写入文件?
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。你需要选择一个 你必须写信给myStream
。 saveFileDialog1.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
。非此即彼。两者都不是。以上是关于当用户在“另存为”对话框中指定位置时,如何将文本写入文件?的主要内容,如果未能解决你的问题,请参考以下文章