2016-04-30 27 views
-2

私のvb.netアプリケーションでフォルダを調べて、古いアプリケーションがアプリケーションによって使用されているかどうかを知らせようとしています。使用中の場合、メッセージボックスが表示されます。私はVB.NET 2008、Express Editionでコーディングしています。 ...どうすればいいの?ありがとうVB内のディレクトリの他のプロセスで使用中のファイルがあるかどうかを検出します

+0

あなたはそれをgoogledしましたか?何か試してみましたか?あなたはSO自体で検索しましたか?重複:http://stackoverflow.com/a/11288781/1659563 – Sachin

+0

私はそれを見ました。しかし、それは私のための全体の解決策ではありません。それは一部です。しかし、私はファイルの名前を知らずに、特定のディレクトリの各ファイルをチェックしたいと思っていて、開いているものがあれば例外のメッセージを表示します。 – dassoubarna

答えて

0

ディレクトリ内のファイルを列挙して、提案されたソリューションを拡張することができます。

Imports System.IO 
Imports System.Runtime.InteropServices 

Module Module1 

    Sub Main() 

     ' Here you specify the given directory 
     Dim rootFolder As DirectoryInfo = New DirectoryInfo("C:\SomeDir") 

     ' Then you enumerate all the files within this directory and its subdirectory 
     ' See System.IO.SearchOption enum for more info 
     For Each file As FileInfo In rootFolder.EnumerateFiles("*.*", SearchOption.AllDirectories) 

      ' Here you can call the method from the solution linked in Sachin's comment 
      IsFileOpen(file) 

     Next 

    End Sub 

    ' Jeremy Thompson's code from here 
    Private Sub IsFileOpen(ByVal file As FileInfo) 
     Dim stream As FileStream = Nothing 
     Try 
      stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None) 
      stream.Close() 
     Catch ex As Exception 

      If TypeOf ex Is IOException AndAlso IsFileLocked(ex) Then 
       ' do something here, either close the file if you have a handle, show a msgbox, retry or as a last resort terminate the process - which could cause corruption and lose data 
      End If 
     End Try 
    End Sub 

    Private 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 


End Module 
関連する問題