【发布时间】:2018-07-01 14:34:07
【问题描述】:
我正在尝试编写一个程序来从 csv 文件中读取记录,处理它们并将结果写入新文件。为此,我构建了一个名为 CsvWriter 的类,它在我读取主 csv 文件时处理标题的写入和附加行。最初我在我的 mac 上工作,使用这个类时我没有收到任何错误,但是当我切换到 windows(制作 windows 窗体应用程序)时,我一直得到
在 mscorlib.dll 中发生了“System.IO.IOException”类型的未处理异常
附加信息:该进程无法访问文件“C:\Users\user\Documents\correct-list.csv”,因为它正被另一个进程使用。
我遇到的错误在以下行的 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());
}
}
【问题讨论】:
-
你试过清洗溶液了吗?在我看来,您的目录存在问题,来自移动项目。你确保你所有的 dll 都有正确的路径吗?
-
@InBetween 不,我不知道。我的主程序类有一个从 csv 读取并在开始时调用 WriteHeader 以创建输出文件和 AppendRow 的函数,每次需要将一行添加到结果中