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 回答