これを試してみてください:
System.IO.FileStream fs;
try
{
startTime = DateTime.Now;
fs = new System.IO.FileStream(FullfilePath, System.IO.FileMode.Open, FileAccess.ReadWrite);
IExcelDataReader excelReader2007 = ExcelReaderFactory.CreateOpenXmlReader(fs);
excelReader2007.IsFirstRowAsColumnNames = false;
DataSet result = excelReader2007.AsDataSet();
if (result.Tables.Count > 0)
{
ds = result;
}
InsertExecLogDetails(startTime, DateTime.Now, Convert.ToString(Common.EventNames.GenerateDataTableFromExcel), Convert.ToString(Common.StatusEnum.Success), "Table generated from excel");
}
catch (Exception ex)
{
InsertExecLogDetails(startTime, DateTime.Now, Convert.ToString(Common.EventNames.GenerateDataTableFromExcel), Convert.ToString(Common.StatusEnum.Failure), Convert.ToString(ex.Message));
}
finally
{
if (fs != null){
try{
fs.Close();
fs.Dispose();
}
catch(Exception ex){
//Error handling for being unable to close file
}
}
}
あなたが前の実行の実行によって、開いているファイルを残していると、それを適切に閉じられていないようですねこれはうまくいけばあなたの問題を解決するはずです。ない場合は、何か他のものはまだファイル
を使用するか、それはあなたのためのファイルの使用を閉鎖するようにあなたがusing
機能を使用することができ、here
を見ているかどうかをチェックし、[編集] using
機能の例( )また、あなたのIExcelDataReaderにusing
を使用する必要があるかもしれないが、私はAPIをチェックしていません:
try
{
using(System.IO.FileStream fs = new System.IO.FileStream(FullfilePath, System.IO.FileMode.Open, FileAccess.ReadWrite))
{
startTime = DateTime.Now;
IExcelDataReader excelReader2007 = ExcelReaderFactory.CreateOpenXmlReader(fs);
excelReader2007.IsFirstRowAsColumnNames = false;
DataSet result = excelReader2007.AsDataSet();
if (result.Tables.Count > 0)
{
ds = result;
}
InsertExecLogDetails(startTime, DateTime.Now, Convert.ToString(Common.EventNames.GenerateDataTableFromExcel), Convert.ToString(Common.StatusEnum.Success), "Table generated from excel");
}
}
catch (Exception ex)
{
InsertExecLogDetails(startTime, DateTime.Now, Convert.ToString(Common.EventNames.GenerateDataTableFromExcel), Convert.ToString(Common.StatusEnum.Failure), Convert.ToString(ex.Message));
}
[EDIT2]
問題は、NTFSシステムsettiによって引き起こされていますそれは安全ではないですと言っフラグngを、あなたはそれをブロック解除するには、次のコードを使用してファイルにアクセスする前にそれを呼び出す必要があります。
public class FileUnblocker {
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteFile(string name);
public bool Unblock(string fileName) {
return DeleteFile(fileName+ ":Zone.Identifier");
}
}
Source
をだからあなたの結果のコードは次のようになります。
try
{
if (new FileUnblocker().Unblock(FullfilePath))
{
using(System.IO.FileStream fs = new System.IO.FileStream(FullfilePath, System.IO.FileMode.Open, FileAccess.ReadWrite))
{
startTime = DateTime.Now;
IExcelDataReader excelReader2007 = ExcelReaderFactory.CreateOpenXmlReader(fs);
excelReader2007.IsFirstRowAsColumnNames = false;
DataSet result = excelReader2007.AsDataSet();
if (result.Tables.Count > 0)
{
ds = result;
}
InsertExecLogDetails(startTime, DateTime.Now, Convert.ToString(Common.EventNames.GenerateDataTableFromExcel), Convert.ToString(Common.StatusEnum.Success), "Table generated from excel");
}
}
else{
//Issue with unblocking, deal with it here
}
}
catch (Exception ex)
{
InsertExecLogDetails(startTime, DateTime.Now, Convert.ToString(Common.EventNames.GenerateDataTableFromExcel), Convert.ToString(Common.StatusEnum.Failure), Convert.ToString(ex.Message));
}
ヌルポインタエラーはどの行に現れますか?リンクを見ることができない人のために:http://i.stack.imgur.com/kLt7F.png – Draken
これ以上の分析では、この時点で発生するようです: 'InsertExecLogDetails()' その方法行う?あなたは例を投稿できますか? – Draken
IExcelDataReader excelReader2007 = ExcelReaderFactory.CreateOpenXmlReader(fs);ここではfsはnullのままです –