文件打开时Excel导入到DataSet中断

我有一个服务,我用于Excel文件导入,实现如下所示:

[Attributes.ImportFileExtension(Extension=".xls")] [Attributes.ImportFileExtension(Extension=".xlt")] [Attributes.ImportFileExtension(Extension=".xlsx")] public class ExcelImportService:FileImportServiceBase,IFileImportService { public DataSet Import(System.IO.Stream fileStream) { IExcelDataReader excelReader = null; switch (Extension) { case ".xls": case ".xlt": excelReader = ExcelReaderFactory.CreateBinaryReader(fileStream); break; case ".xlsx": excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream); break; } excelReader.IsFirstRowAsColumnNames = true; DataSet dataSet = excelReader.AsDataSet(); return dataSet; } } 

此外,我有以下代码通过正在创build的工厂调用此服务。 调用这个服务的代码如下所示:

  try { var extension = Path.GetExtension(dialog.FileName); var importService = FileImportServiceFactory.Create(extension); var stream = dialog.OpenFile(); var data = importService.Import(stream); stream.Close(); stream.Dispose(); var result = new FileImportedMessage { Data = data }; result.Dispatch(); } catch (Exception e) { MessageDispatcher.Dispatch(new ExceptionMessage(e)); } 

导入工作发现,除非文件在导入时处于打开状态。

我有两个问题:

1)处理这种情况的最佳实践/策略是什么?

2)我该怎么处理呢?

问题是你正在以只读模式打开文件,当加法器程序以读写模式打开时,它locking文件。

你只有两个select。

1-贪婪的方式在读写模式下打开文件locking它只能用于你的程序。

2-(只有当文件不大时)将整个文件读到内存stream中并从那里处理。