2017-10-24 14 views
0

このコードをご覧ください。C#でファイルストリームを閉じる方法

string name = dt.Rows[0]["Name"].ToString(); 
byte[] documentBytes = (byte[])dt.Rows[0]["DocumentContent"]; 

int readBytes = 0; 
//int index = 0; 
readBytes = documentBytes.Length; 
try 
{ 
    using (FileStream fs = new FileStream(name, FileMode.Create, FileAccess.Write, FileShare.Read)) 
    { 

     fs.Write(documentBytes, 0, readBytes); 
     //System.Diagnostics.Process prc = new System.Diagnostics.Process(); 
     //prc.StartInfo.FileName = fs.Name; 
     Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 
     app.Visible = false; 
     Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Open(fs.Name); 
     Microsoft.Office.Interop.Excel._Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1]; // Explicit cast is not required here 
    // lastRow = worksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row; 

     app.Visible = true; 


     fs.Flush(); 
     fs.Close(); 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("You have clicked more than one time. File is already open.", "WorkFlow", MessageBoxButtons.OK, MessageBoxIcon.Information); 
} 

ファイルストリームを使用してExcelファイルを開きます。 Excelがうまく表示されています。しかし、私はファイルストリームを閉じることができません。それにはまだ「File Now available」という小さなポップアップが表示されます。それを取り除く方法?私はfs.Close()とFlush()が本当にここで働いていないのを見ることができます。助けてください。

+0

"ファイルが利用可能になりました"?それは本当にメッセージですか? – Default

+1

Excelはファイル上でFileShare.Readを使用したことに気づくだけなので、書き込みできないことが分かり、読み取り専用モードでファイルを開く必要があります。ファイルを閉じると、再び幸せになります。回避策は簡単ですが、Excelを起動する前に*ファイルを閉じてください。 –

+0

あなたのコードはストリームに対して 'using'と' Close'の両方を持っています - 両方を持つことは冗長です。 –

答えて

3

ストリームを開いたままExcelにファイルを開くように要求しています。あなたは単にそれにバイトを書こうとしていることを考えると、私はちょうど使用したいと思う:

// This will close the file handle after writing the data 
File.WriteAllBytes(name, documentBytes); 

// Then you're fine to get Excel to open it 
var app = new Microsoft.Office.Interop.Excel.Application(); 
app.Visible = false; 
var workbook = app.Workbooks.Open(name); 
+0

名前はvar workbook = app.Workbooks.Open(name);で動作していません。 –

+0

@SajithSudhi:「動作していません」は基本的に情報を提供せず、非常に手助けしてくれません。 –

+0

WorkFlowUAT.exeで 'System.Runtime.InteropServices.COMException'の未処理の例外が発生しました 追加情報:申し訳ありませんletter.xlsxが見つかりませんでした。移動、名前変更、削除された可能性はありますか? –

関連する問題