2017-06-06 63 views
0

我使用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次......

+0

工作簿关闭并处置 –

+0

您还没有ReleaseComObject所有COM对象(例如excel.Application.Workbooks)。请参阅https://ausdotnet.wordpress.com/2008/05/26/com-interop-principle-2-fear-the-period/。 – mjwills

+0

作为一个快速和肮脏的,添加GC.Collect(); GC.WaitForPendingFinalizers();在CleanupExcel方法的末尾。 – mjwills

回答

2

,但我的一个客户有时会是的IO.Exception:'进程无法访问该文件,因为它正在被另一个进程使用'。

我应该打多少钱,基本问题是客户端在运行代码时保持文件在Excel中打开? ;)

+0

不,情况并非如此......我已经在客户端的电脑上自己测试了它 – tompynation

+0

然后尝试使用众多程序之一列出文件锁定。 – user9993

相关问题