写入文本文件时出现“文件正在使用”错误

Posted

技术标签:

【中文标题】写入文本文件时出现“文件正在使用”错误【英文标题】:"File in use" error when writing to text file 【发布时间】:2013-10-28 17:37:49 【问题描述】:

当我尝试创建一个文件然后写入它时,我收到了错误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);
            
        

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

【问题讨论】:

仅供参考,您可以使用Process Explorer 来查看挂在文件上的进程。您可以搜索特定文件。 BTW 应该有 Googled... 第一个结果是完全相同的问题。关闭为重复。 重复File being used by another process after using File.Create() 【参考方案1】:

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

string filePath = "databasePath + "\\POSData.txt"";
using (StreamWriter sw = new StreamWriter(filePath, true))

    //write to the file

【讨论】:

@Nathan 乐于助人。【参考方案2】:

当您调用 File.Create 时,您保持文件打开(即您永远不会关闭文件)。

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

if (result == DialogResult.OK)

    databasePath = folderBrowserDialog1.SelectedPath;

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

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

【讨论】:

【参考方案3】:

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

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

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

鉴于 File.Create:

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

【讨论】:

【参考方案4】:

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

此方法创建的 FileStream 对象有一个默认的 FileShare 无值;没有其他进程或代码可以访问创建的文件 直到原始文件句柄被关闭。

        using (FileStream fs = File.Create(databasePath + "\\POSData.txt"))
        
             fs.Write(uniEncoding.GetBytes(stockCount), 0, uniEncoding.GetByteCount(stockCount));
        

【讨论】:

【参考方案5】:

我用过,效果很好

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

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

【讨论】:

以上是关于写入文本文件时出现“文件正在使用”错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Appdata 文件夹中创建文本文件时出现异常,它说文件正在被另一个进程使用

在 AnyLogic 中为代理创建文本文件时出现 NullPointerExection 错误

从 S3 将嵌套文本文件读入 spark 时出现内存错误

Android 使用 Intent 保存和写入文本文件,得到 IOException “No content provider”

查询带有标题的制表符分隔的文本文件时出现 VBA 错误 - “没有为一个或多个必需参数提供值”

当我已经定义了变量时出现意外的令牌错误