StreamWriter不写入现有文件

时间:2009-09-04 15:31:51

标签: c# streamwriter

我正在尝试使用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")

它适用于现有文件。

5 个答案:

答案 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");
    }