2016-07-21 18 views
1

Ich schreibe ein Programm für einen Radiosender, der eine XML-Datei scannt, auf der der gerade spielende Song aktualisiert wird, ich brauche dann das Programm, um den gezogenen Künstlernamen und Songnamen aus dem XML zu senden eine URL, damit ich die Daten im Web anzeigen kann. HierFileSystemWatcher XML VB.Net

ist der Code, den ich geschrieben habe, zu scannen und die Daten anzuzeigen, die ich aus der XML benötigen:

Imports System.IO 
Imports System.Xml 
Public Class Form1 

    Private Sub BrowseButton_Click(sender As Object, e As EventArgs) Handles BrowseButton.Click 

     If OpenFileDialog1.ShowDialog = DialogResult.OK Then 

      XMLFileDirectoryTextBox.Text = OpenFileDialog1.FileName 

     End If 

    End Sub 

    Private Sub StartButton_Click(sender As Object, e As EventArgs) Handles StartButton.Click 

     If (XMLFileDirectoryTextBox.Text = "") Then 

      MessageBox.Show("XML file not found. Please select your XML file and try again.") 
     Else 

      If (System.IO.File.Exists(XMLFileDirectoryTextBox.Text.ToString())) Then 

       Dim document As XmlReader = New XmlTextReader(XMLFileDirectoryTextBox.Text.ToString()) 

       While (document.Read()) 

        Dim type = document.NodeType 

        If (type = XmlNodeType.Element) Then 

         If (document.Name = "ARTIST") Then 

          ArtistNameTextBox.Visible = True 
          ArtistNameTextBox.Text = document.ReadInnerXml.ToString() 

         End If 

         If (document.Name = "TITLE") Then 

          SongTitleTextBox.Visible = True 
          SongTitleTextBox.Text = document.ReadInnerXml.ToString() 

         End If 

        End If 

       End While 

      End If 

     End If 

    End Sub 

Da die XML ständig ändert ich die Datei müssen ständig auf Veränderungen beobachtet werden Aus diesem Grund habe ich beschlossen, die SystemFileWatcher-Klasse in VB zu verwenden. Ich habe versucht, es auszuprobieren, aber von was ich sehen kann SystemFileWatcher funktioniert nur mit einem Ordner für Änderungen und nicht eine bestimmte Datei.

Ich bin ziemlich neu in der Codierung so tut mir leid, wenn ihre schlechten Techniken innerhalb der Code oben (ich lerne immer noch), wenn jemand würde mir freundlicherweise helfen, es würde sehr geschätzt werden.

Danke.

Antwort

0

Ja, Sie können nach einer Datei suchen. Es gibt eine good example on MSDN, mit der Sie beginnen sollten. Hier ist eine leichte Anpassung von dem, was eine einzelne Datei Uhren:

Public Sub CreateFileWatcher(ByVal path As String, ByVal filename as String) 
    'Create a new FileSystemWatcher and set its properties. 
    Dim watcher As New FileSystemWatcher() 
    watcher.Path = path 
    'Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. 
    watcher.NotifyFilter = NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName 
    'Only watch the file we are interested in 
    watcher.Filter = filename 

    'Add event handlers. 
    AddHandler watcher.Changed, AddressOf OnChanged 
    AddHandler watcher.Created, AddressOf OnChanged 
    AddHandler watcher.Deleted, AddressOf OnChanged 
    AddHandler watcher.Renamed, AddressOf OnRenamed 

    ' Begin watching. 
    watcher.EnableRaisingEvents = True 
End Sub 

' Define the event handlers. 
Private Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs) 
    ' Specify what is done when a file is changed, created, or deleted. 
    Console.WriteLine("File: " & e.FullPath & " " & e.ChangeType) 
End Sub 

Private Shared Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs) 
    ' Specify what is done when a file is renamed. 
    Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath) 
End Sub 
+0

Das C# Antwort ist nur eine Paste aus [FileSystemWatcher.NotifyFilter Property] (https://msdn.microsoft.com/en-us/library/ system.io.filesystemwatcher.notifyfilter (v = vs.85) .aspx/html? cs-save-lang = 1 und cs-lang = csharp # code-snippet-5) Es verweist darauf, aber es ist eine Paste – Plutonix

+0

@Matt Wilko Ich habe das gesehen, aber mein Problem ist, dass ich einen OpenFiledialog habe, der es mir erlaubt, genau die XML zu definieren, die das Programm verwenden soll. Der obige Code wählt einen Ordner und prüft dann auf Änderungen in (* .txt) Dateien, aber in meinem Fall der Ordner, der die XML hat ich brauche nicht die einzige XML in ihrer. –

+0

Ändern Sie einfach den 'watcher.Filter =" MyExactFilename.xml "', der nur eine einzelne Datei ansehen soll –