1

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

它适用于现有文件。

4

5 回答 5

2

它可能与您组合路径和文件名的方式有关。试试这个:

using(StreamWriter sw = new StreamWriter(
    Path.Combine(FolderDialog.SelectedPath, "my_file.txt"))
{
    sw.writeLine("blablabla");
}

此外,请检查以确保 FolderDialog.SelectedPath 值不为空。:)

于 2009-09-04T15:39:00.870 回答
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" 的硬编码路径。

于 2009-09-04T15:38:28.673 回答
0

检查文件是否实际上被其他进程使用。

为此,请运行Process Explorer,按 Ctrl+F,输入文件名,然后单击查找。

顺便说一句,完成这项任务的最佳方法是这样的:

using(StreamWriter sw = File.AppendText(Path.Combine(FolderDialog.SelectedPath, @"my_file.txt")))

编辑:不要第二个参数中加上斜线Path.Combine

于 2009-09-04T15:38:35.833 回答
0

该文件已在使用中,因此无法覆盖。但是,请注意,此消息并不总是完全准确 - 该文件实际上可能正在由您自己的进程使用。检查您的使用模式。

于 2009-09-04T15:38:36.193 回答
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");
    }
于 2017-06-05T16:44:59.210 回答