我正在尝试使用StreamWriter将一些文本写入文件并获取 FolderDialog所选文件夹中的文件路径。我的代码工作正常如果 文件尚不存在。但如果该文件已存在,则抛出异常 该文件已被其他进程使用。
using(StreamWriter sw = new StreamWriter(FolderDialog.SelectedPath + @"\my_file.txt")
{
sw.writeLine("blablabla");
}
现在,如果我这样写:
using(StreamWriter sw = new StreamWriter(@"C:\some_folder\my_file.txt")
它适用于现有文件。
答案 0 :(得分:2)
这可能与您组合路径和文件名的方式有关。试一试:
using(StreamWriter sw = new StreamWriter(
Path.Combine(FolderDialog.SelectedPath, "my_file.txt"))
{
sw.writeLine("blablabla");
}
另外,请检查以确保FolderDialog.SelectedPath值不为空。 :)
答案 1 :(得分:0)
这是一个便宜的答案,但您尝试过这种解决方法吗?
string sFileName= FolderDialog.SelectedPath + @"\my_file.txt";
using(StreamWriter sw = new StreamWriter(sFileName))
{
sw.writeLine("blablabla");
}
我建议的另一件事是验证FolderDialog.SelectedPath +“\ my_file.txt”是否等于“C:\ some_folder \ my_file.txt”的硬编码路径。
答案 2 :(得分:0)
检查文件是否实际上被其他进程使用。
为此,请运行Process Explorer,按Ctrl + F,输入文件名,然后点击查找。
顺便说一句,完成此任务的最佳方法是:
using(StreamWriter sw = File.AppendText(Path.Combine(FolderDialog.SelectedPath, @"my_file.txt")))
编辑:不在Path.Combine
的第二个参数中添加斜杠。
答案 3 :(得分:0)
该文件已被使用,因此无法覆盖。但请注意,此消息并不总是完全准确 - 该文件实际上可能由您自己的进程使用。检查您的使用模式。
答案 4 :(得分:0)
试试这个
using (StreamWriter sw = File.AppendText(@"C:\some_folder\my_file.txt"))
{
sw.writeLine("blablabla");
}
它只能在现有文件中使用,因此要验证文件是新的还是已存在,请执行类似
的操作 string path = @"C:\some_folder\my_file.txt";
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
//once file was created insert the text or the columns
sw.WriteLine("blbalbala");
}
}
// if already exists just write
using (StreamWriter sw = File.AppendText(@"C:\some_folder\my_file.txt"))
{
sw.writeLine("blablabla");
}