c# - 类型为 'System.IO.IOException' 的未处理异常。该进程无法访问该文件,因为它正被另一个进程使用

标签 c# file csv io

我正在尝试编写一个程序来从 csv 文件中读取记录,处理它们并将结果写入一个新文件。为此,我构建了一个名为 CsvWriter 的类,它在我阅读主 csv 文件时处理标题的写入和附加行。最初我是在我的 Mac 上工作的,使用这个类时我没有收到任何错误,但是当我切换到 Windows(制作 Windows 窗体应用程序)时,我不断收到

An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file 'C:\Users\user\Documents\correct-list.csv' because it is being used by another process.

我遇到的错误是在 CsvWriter 类中的以下行:

File.WriteAllText(filename, builder.ToString());

我认为使用 System.IO.File.WriteAllText 会自动刷新并关闭文件。我找不到任何其他错误来源。 感谢任何解决此错误的帮助。

这是我的代码:

public class CsvWriter : StreamWriter
{
    private string filename;

    /// <summary>
    /// Initializes a new instance of the <see cref="T:USPSAddressVerification.CsvWriter"/> class.
    /// </summary>
    /// <param name="filename">Filename of the csv file to write on.</param>
    public CsvWriter(string filename) : base(filename)
    {
        this.filename = filename;
    }

    /// <summary>
    /// Writes the header in the csv file.
    /// </summary>
    /// <param name="headers">Array of Headers.</param>
    /// <param name="addHeaders">Add additional headers to the csv file.</param>
    public void WriteHeader(List<string> headers)
    {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < headers.Count; i++)
        {
            if (i < headers.Count - 1) builder.Append("\"" + headers[i] + "\",");
            else builder.Append("\"" + headers[i] + "\"\n");
        }
        File.WriteAllText(filename, builder.ToString());
    }

    /// <summary>
    /// Appends the row to the csv file.
    /// </summary>
    /// <param name="row">Row to be appended.</param>
    public void AppendRow(List<string> row)
    {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < row.Count; i++)
        {
            if (i < row.Count - 1) builder.Append("\"" + row[i] + "\",");
            else builder.Append("\"" + row[i] + "\"\n");
        }
        File.AppendAllText(filename, builder.ToString());
    }

}

最佳答案

您正在派生 StreamWriter,这将打开文件。 而不是使用 File.WriteAllText 您应该使用 StreamWriter (基本)方法来编写您的内容。 或者不派生 StreamWriter。

关于c# - 类型为 'System.IO.IOException' 的未处理异常。该进程无法访问该文件,因为它正被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390439/

相关文章:

c# - 为什么我的 C# 方法存在用户对象的内存泄漏?

如果抛出异常,Java 继续执行循环

c - 无法使文件 I/0 在周期计数器功能 -c 中工作

python - 如何使用 python excel粘贴到特定列

javascript - 一页上多个简单图表 d3.js

JSON 反序列化仅在实时构建中抛出循环引用

c# - 我如何向 SandcaSTLe 文档化类库显示方法体

c# - 捕捉声音输出

java - 读取输入文件到链表的节点错误

c# - 使用证书保护 IIS 中的 WCF 服务