2016-03-31 2 views
0

vb.netでは、プログラムをsqlite3.exeで実行しています。 sqlite3のは、テキストファイルに格納されている次のコマンドを実行します:output.csvが作成されたらSQLiteから作成されたcsvがクローズされているので、どのように読むことができますか?

.open prod.db 
.mode csv 
.output output.csv 
SELECT STATEMENT 
.output stdout 
.exit 

を、私はその後の結果は何であったかを見るためのStreamReaderを実行して、私は次のエラーを取得:

The process cannot access the file 'output.csv' because it is being used by another process. 

しかし、私はcsvに行き、作成後に手動で開くことができるので、長い間ロックされていないことがわかります。

プロセスが終了したときに確認するコードを書いていますが、これをチェックするプロセスが実行されているかどうかはわかりません(すでにSQLite3.exeを閉じてチェックしています)。言い換えれば、Streamreaderが開くために自分のCSVが無料であることをどのように知っていますか?

+0

最後にコードを返す方法がありますか? deは結果を待たなければならないでしょうか? (ファンではなく、SQLiteに精通していません) – Plutonix

+1

Manuel Alves氏による[this](http://stackoverflow.com/a/5380257/6141544)の回答を確認してください。 – droque

+0

完璧!私はこれを使用して、プロセスではなくcsvをチェックすることができました(私は、恥ずかしくて、私はやりたくないと思っていました...!)。 – Dustin

答えて

0

私は問題を解決するために私自身のコードの一部と組み合わせることができました「

VB.Net 3.5 Check if file is in use

をdroqueのリンクを使用:

FileInUseがここで定義されて
While FileInUse("output.csv") And j < 100 
     System.Threading.Thread.Sleep(100) 
      j += 1 
End While 
'Timeout after ~10 seconds 
If j = 100 Then 
     MessageBox.Show("CSV timeout. Exiting now.") 
     Exit Sub 
End If 

Public Function FileInUse(ByVal sFile As String) As Boolean 
     Dim thisFileInUse As Boolean = False 
     If System.IO.File.Exists(sFile) Then 
      Try 
       Using f As New IO.FileStream(sFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None) 
        ' thisFileInUse = False 
       End Using 
      Catch 
       thisFileInUse = True 
      End Try 
     End If 
     Return thisFileInUse 
    End Function 
関連する問題