创建CSV文件时出现偶然IOException'进程无法访问文件...'
我使用Office.Interop.Excell库创建一个CSV(带有';'作为分隔符)文件。创建CSV文件时出现偶然IOException'进程无法访问文件...'
以下代码在我的电脑上正常工作,但我的一个客户端有时会得到IO.Exception:'进程无法访问文件,因为它正在被另一个进程使用'。
奇怪的是,这个错误并不八方通雨后春笋般冒出来,有时它的工作原理,有时它does not ...
有什么能为我的客户这个偶然IO.Exception的原因。这是我的代码:
public static void GenerateCsvFile(DataSet ds, string paramFileFullPath, Dictionary<string, string[]> tableHeaders)
{
object missing = System.Reflection.Missing.Value;
var excel = new Application { DisplayAlerts = false };
Workbook workbook = null;
try
{
workbook = excel.Application.Workbooks.Add(true);
foreach (System.Data.DataTable dt in ds.Tables)
AddTableSheet(ref workbook, ref excel, dt, true, tableHeaders[dt.TableName], false);
workbook.SaveAs(paramFileFullPath, XlFileFormat.xlTextMSDOS, missing, missing, false, false,
XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
}
finally
{
CleanupExcel(excel, workbook);
}
File.WriteAllText(paramFileFullPath, File.ReadAllText(paramFileFullPath).Replace("\t", ";"));
}
我猜的错误有时来自行:
File.WriteAllText(paramFileFullPath, File.ReadAllText(paramFileFullPath).Replace("\t", ";"));
有可能是什么问题我正在清洗/关闭Excel中的方法是什么?
private static void CleanupExcel(Application excel, Workbook workbook)
{
if (excel == null)
return;
excel.DisplayAlerts = false;
excel.Quit();
if (workbook != null)
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(excel);
}
又是如何得出这个永诺对我的作品,但我的客户的电脑上它只能像1出5次......
,但我的一个客户有时会是的IO.Exception:'进程无法访问该文件,因为它正在被另一个进程使用'。
我应该打多少钱,基本问题是客户端在运行代码时保持文件在Excel中打开? ;)
不,情况并非如此......我已经在客户端的电脑上自己测试了它 – tompynation
然后尝试使用众多程序之一列出文件锁定。 – user9993
工作簿关闭并处置 –
您还没有ReleaseComObject所有COM对象(例如excel.Application.Workbooks)。请参阅https://ausdotnet.wordpress.com/2008/05/26/com-interop-principle-2-fear-the-period/。 – mjwills
作为一个快速和肮脏的,添加GC.Collect(); GC.WaitForPendingFinalizers();在CleanupExcel方法的末尾。 – mjwills