文件打开时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中并从那里处理。