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