1

ファイル「test.txt」が開いているかどうかを確認できるかどうか疑問に思っていましたか?もしそうなら、ファイルが使用中であるというメッセージを表示しますか? 私の最大の問題は、ファイルをメモ帳、Word、Excel などで開くことができることです。ファイルが開いているかどうかを確認する基本的なコーディングがあります。ファイルが現在開いているかどうか、開いていないかどうかを確認します。使用中は、コーディングを続行します。これまでのところ、次のコーディングがあります。

Dim Process() As Process = System.Diagnostics.Process.GetProcessesByName("notepad")
Dim Process2() As Process = System.Diagnostics.Process.GetProcessesByName("word")

For Each p As Process In Process
    If p.MainWindowTitle.Contains("test") Then
        MessageBox.Show("file open")
    Else
        'Run my code
    End If
Next

For Each p2 As Process In Process2
    If p2.MainWindowTitle.Contains("test") Then
        MessageBox.Show("file open")
    Else
        'Run my code
    End If
Next
4

2 に答える 2

1

ファイルに対して操作を実行してみて (たとえば@ChrisWが提案するように開く)、代わりにロックされているかどうかを確認してください。

例えば

Catch ex As Exception
If TypeOf ex Is IOException AndAlso IsFileLocked(ex) Then
' do something? 
End If
End Try

Private Shared Function IsFileLocked(exception As Exception) As Boolean
    Dim errorCode As Integer = Marshal.GetHRForException(exception) And ((1 << 16) - 1)
    Return errorCode = 32 OrElse errorCode = 33
End Function
于 2012-06-16T02:06:26.763 に答える
0

多くのアプリケーションは、ファイルをロードするときにファイルの一時コピーを作成します。そのため、これを確認することは困難です。やり過ぎの可能性があるバイナリによってどのファイルがロードされているかを確認するデバッガを作成できます。

または、次のようなものを使用します。

try
{
  stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None)
}
catch (IOException)
{
  // the file is locked and not available to read or write.
  return true
}
finally
{
 // close the stream
}
于 2012-06-15T23:26:12.027 に答える