我正在尝试编写一个程序来从 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/