1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
   |  
Imports System.IO
Imports System.ComponentModel
Imports System.Threading
 
 
Public Class CatiaFileWatcher
    Inherits System.Windows.Forms.BaseCollection
    Implements INotifyPropertyChanged
    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
 
    Private _FullFileName As String = Nothing
    Private WithEvents _Version As String = Nothing
    Private WithEvents _Release As String = Nothing
    Private WithEvents _Hotfix As String = Nothing
 
    Const _TextFilter As String = "LastSaveVersion"
    Private _TempFileName As String = My.Computer.FileSystem.SpecialDirectories.Temp + "\CatiaWatcherOut.txt"
    Private MyProcess As New Process
 
    Public ReadOnly Property Hotfix() As String
        Get
            Return _Hotfix
        End Get
    End Property
 
    Public ReadOnly Property Release() As String
        Get
            Return _Release
        End Get
    End Property
 
    Public ReadOnly Property Version() As String
        Get
            Return _Version
        End Get
    End Property
 
    Public Property FullFileName() As String
        Get
            Return _FullFileName
        End Get
        Set(ByVal value As String)
            _FullFileName = value
        End Set
    End Property
 
    Public Sub FileWatch()
 
        Dim StartInfo As New ProcessStartInfo
 
        Try
            My.Computer.FileSystem.DeleteFile(_TempFileName)
        Catch ErrNotFound As FileNotFoundException
 
        Catch ErrElse As Exception
            MsgBox(ErrElse.Message)
            Exit Sub
 
        End Try
 
        With StartInfo
            .WindowStyle = ProcessWindowStyle.Hidden
            .UseShellExecute = False
            .RedirectStandardOutput = True
            .FileName = "cmd.exe"
            .Arguments = "/C findstr /c:" + Chr(34) + _TextFilter + Chr(34) + " " + FullFileName '+ " > " + _TempFileName
        End With
        MyProcess.StartInfo = StartInfo
 
        Dim ThreadProcess As New Thread(AddressOf ProcessThreading)
 
        ThreadProcess.Start()
 
 
    End Sub
 
    Private Sub ProcessThreading() 'Process As Process, TempfileName As String)
 
        MyProcess.Start()
        MyProcess.WaitForExit()
 
        Dim ReadValues As String = Nothing
 
        Using Sr As StreamReader = MyProcess.StandardOutput 'New StreamReader(_TempFileName, System.Text.Encoding.ASCII)
            Do While Sr.EndOfStream = False
                ReadValues = String.Concat(ReadValues, ChrW(Sr.Read))
            Loop
        End Using
 
        _Version = ReadParameters(ReadValues, _TextFilter, "<Version>")
        OnPropertyChanged("Version")
        _Release = ReadParameters(ReadValues, _TextFilter, "<Release>")
        OnPropertyChanged("Release")
        _Hotfix = ReadParameters(ReadValues, _TextFilter, "<HotFix>")
        OnPropertyChanged("Hotfix")
 
 
    End Sub
 
 
    Function ReadParameters(ByVal TextToRead As String, ByVal StartString As String, ByVal ParametreName As String) As String
 
        Dim Start As Integer = TextToRead.IndexOf(StartString)
        Dim StartBalise As Integer = TextToRead.IndexOf(ParametreName, Start)
        Dim LengthBalise As Integer = ParametreName.Length
        Dim EndBalise As Integer = TextToRead.IndexOf("/" + ParametreName, Start)
 
        Try
            Return TextToRead.Substring(StartBalise + LengthBalise, EndBalise - (StartBalise + LengthBalise))
        Catch
            Return "Not able to read " + ParametreName + " value."
        End Try
 
 
    End Function
 
    Protected Sub OnPropertyChanged(ByVal name As String)
 
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(name))
    End Sub
 
 
End Class | 
Partager