![](/img/trans.png)
[英]Unhandled exception: System.IO.IOException: The process cannot access the file 'xxx.nupkg' because it is being used by another process
[英]An unhandled exception of type 'System.IO.IOException'.The process cannot access the file because it is being used by another process
我正在尝试编写一个程序来从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());
}
}
您在派生StreamWriter,这将打开文件。 而不是使用File.WriteAllText,您应该使用StreamWriter(基本)方法来编写内容。 或不要派生StreamWriter。
您的类继承自System.IO.StreamWriter。 当使用filename参数调用构造函数时,也将使用this(filename)调用StreamWriter构造函数。 使用该命令,您可以创建StreamWriter类的实例,只要您不处理或关闭文件就可以访问该文件。 这就是为什么File.WriteAllText命令每次都会失败的原因。 您的类是否从StreamWriter继承有什么原因? File.WriteAllText没有它就可以工作。
更新1
Ups我的回答有点迟了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.