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));
}
インポートは、インポート中にファイルが開いていない限り、検出されます。
2つの質問があります:
1)この状況に対処するためのベストプラクティス/戦略は何ですか?
2)どうすればよいですか、またはこれを処理する必要がありますか?