我有一个用于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;
}
}
此外,我有以下代码通过正在创建的工厂调用此服务。调用此服务的代码如下所示:
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)我该如何处理?
答案 0 :(得分:0)
问题是你是在只读模式下打开文件,当加法程序以读写模式打开它时,它会锁定文件。
您只有两个选择。
1-贪婪的方式在读写模式下打开文件,仅为您的程序锁定它。
2-(仅当文件不大时)将完整文件读取到内存流并从那里进行处理。