2016-03-28 46 views
0

C:\ Data.xlsbが既に開いているかどうかを確認します。ファイルが既に開いているかどうかを確認する方法はありますか?

私はここHow to tell if a certain Excel file is open using VB.NET?

Public Shared Function OpenUnlockedFile(ByVal path As String) As StreamWriter 
Dim sw As StreamWriter = nothing 
Try 
    sw = New StreamWriter(path) 
Catch ex As IOException When System.Runtime.InteropServices.Marshal.GetLastWin32Error() = 32 
    REM locked, return nothing 
End Try 
Return sw 
End Function 

から、次のコードを持っているしかし、私は上記のコードを使用する方法を知ってはいけません。

私は機能の代わりにサブを好む。

よろしくお願いいたします。

+0

なぜあなたは機能を覆いたいのですか?ファイルが開かれているかどうかをチェックしたい場合は、TrueまたはFalseを返すようにすることができるので、関数は良い方法です。したがって、 'If'ステートメントでチェックすることができます。 –

+0

戻り値の型を 'Boolean'に変更し、関数の最後の行に' True'を返し、 'Catch'ブロックに' False'を返すことをお勧めします。また、 'FileStream'は' StreamWriter'よりも優れていると思います。 –

+0

@VisualVincentあなたがアドバイスしたコードを投稿してください。 – Markowitz

答えて

0

このコードを使用するには、次の例のように機能を使用します。

Imports System.IO 

Public Class Form1 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If OpenUnlockedFile("C:\Data.xlsb") Is Nothing Then 
      MessageBox.Show("File is locked") 
     End If 
    End Sub 

    Public Shared Function OpenUnlockedFile(ByVal path As String) As StreamWriter 
     Dim sw As StreamWriter = Nothing 
     Try 
      sw = New StreamWriter(path) 
     Catch ex As IOException When System.Runtime.InteropServices.Marshal.GetLastWin32Error() = 32 
     REM locked, return nothing 
     End Try 
     Return sw 
    End Function 

End Class 

機能、OpenUnlockedFile(「C:\ Data.xlsb」)は、あなたが(これでButton1を押すたびに実行されます例)。関数が実行され、Nothingが返された場合、ファイルがロックされていることがわかります。

あなたも動作するように、この例のために

Imports System.IO 

が必要となりますのでご注意ください。

+0

開かれているかどうかは分かりませんが、実際にはIf文のようにチェックしない限り何もしません。 –

+0

私もそれを見て、数分前に編集しました! – Dustin

1

お客様のニーズに合わせて返品タイプをBooleanに変更し、StreamWriterからFileStreamに変更する必要があります。これは、あなたがあなたが望むとは思っていない(または、少なくともプレーンテキストStreamWriterを使用していない)ファイルに書きたいと思ったOPをあなたがリンクしたポストに入れているからです。

Public Shared Function IsFileAvailable(ByVal path As String) As Boolean 
    Try 
     Dim fs As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None) 
     fs.Close() 
    Catch ex As IOException When System.Runtime.InteropServices.Marshal.GetLastWin32Error() = 32 
     Return False 
    End Try 
    Return True 
End Function 

それからちょうどこのようにそれを使用します。

If IsFileAvailable("C:\Data.xlsb") = True Then 
    'File is not locked, do what you like here. 
Else 
    MessageBox.Show("The file is locked!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
End If 

を、それはプロセスがそれをロックせずにそれを開いている可能性があります、ファイルがアクセス可能であるならばどちらかの機能だけを教えてくれますので、予めご了承ください。

関連する問題