2

The process cannot access the file 'C:\Users\Ryan\Desktop\New folder\POSData.txt' because it is being used by another process.当我尝试创建文件然后写入文件时出现错误。什么进程正在使用该文件?我在创建文件后检查了要调用的 file.close,但它不存在。我该如何度过这个难关?谢谢!

这是我的代码:

MessageBox.Show("Please select a folder to save your database to.");
        this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.Desktop;
        DialogResult result = this.folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {
            databasePath = folderBrowserDialog1.SelectedPath;
            if (!File.Exists(databasePath + "\\POSData.txt"))
            {
                File.Create(databasePath + "\\POSData.txt");
            }

            using (StreamWriter w = new StreamWriter(databasePath + "\\POSData.txt", false))
            {
                w.WriteLine(stockCount);
            }
        }

编辑:仅在创建文件时发生。如果它已经存在,则不会发生错误。

4

5 回答 5

2

实际上,甚至不用费心使用File.Create. 您收到该错误的原因是因为File.Create在该文本文件上打开了一个流。

string filePath = "databasePath + "\\POSData.txt"";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
    //write to the file
}
于 2013-10-28T17:44:53.940 回答
0

File.Create返回一个FileStream可能需要关闭的对象。

此方法创建的 FileStream 对象的默认 FileShare 值为 None;在关闭原始文件句柄之前,没有其他进程或代码可以访问创建的文件。

        using (FileStream fs = File.Create(databasePath + "\\POSData.txt"))
        {
             fs.Write(uniEncoding.GetBytes(stockCount), 0, uniEncoding.GetByteCount(stockCount));
        }
于 2013-10-28T17:43:13.557 回答
0

您在调用时保持文件打开File.Create(即您从不关闭文件)。

StreamWriter如果文件不存在,将为您创建文件,所以我不会费心检查自己。您可以删除检查它是否存在并在不存在时创建它的代码。

if (result == DialogResult.OK)
{
    databasePath = folderBrowserDialog1.SelectedPath;

    using (StreamWriter w = new StreamWriter(databasePath + "\\POSData.txt", false))
    {
        w.WriteLine(stockCount);
    }
 }

请注意,如果文件不存在,则忽略构造函数bool中的第二个参数。StreamWriter

于 2013-10-28T17:43:54.053 回答
0

File.Create 还会打开文件进行读/写。因此,您在 File.Create 时会留下一个打开的 FileStream。

假设覆盖是好的,那么你可能想要做这样的事情:

        using (var fs = File.Create(databasePath + "\\POSData.txt"))
        using (StreamWriter w = new StreamWriter(fs))
        {
            w.WriteLine(stockCount);
        }

鉴于 File.Create:

创建或覆盖指定路径中的文件。

于 2013-10-28T17:44:01.387 回答
0

我用了这个,它奏效了

`File.AppendAllText(fileName,"");`

这会创建一个新文件,不向其中写入任何内容,然后为您关闭它。

于 2020-07-05T22:12:03.080 回答