2016-06-09 20 views
0

Ich stoße auf einen kleinen Fehler in einer vb.net Konsolenanwendung, mit der ich gerade arbeite.VB.NET: XMLWriter() prüfen, ob ein Verzeichnis existiert und ob eine Datei existiert, sonst erstellen Sie sie

Es dieses Stück Code enthält:

writer = XmlWriter.Create(xmlSaveLocation, settings) 

Der Wert xmlSaveLocation ist: C: \ temp \ crawl \ unkomprimierte \ fullCrawl.xml

ich in den Bug lief, weil dies der erste ist Ich starte die Anwendung und weder die Verzeichnisse, noch die Datei existieren auf meinem lokalen C: Laufwerk.

Ich möchte herausfinden, wie ich eine Überprüfung für die Verzeichnisse und die Datei hinzufügen kann, bevor die Zuordnung zu der Writer-Variable auftritt, auf diese Weise müssen zukünftige Benutzer nicht auf dieses Problem stoßen.

Mein erster und einziger Versuch war diese If-Anweisung unten hinzuzufügen:

If (Not System.IO.Directory.Exists(xmlSaveLocation)) Then 
    System.IO.Directory.CreateDirectory(xmlSaveLocation) 
    writer = XmlWriter.Create(xmlSaveLocation, settings) 
Else 
    writer = XmlWriter.Create(xmlSaveLocation, settings) 
End If 

Das nur für das Verzeichnis funktioniert, aber es bricht auf der Datei.

Jede Hilfe würde sehr geschätzt werden.

Vielen Dank.

Antwort

1

Dies sollte für Sie arbeiten:

' Exctract the directory path 
Dim xmlSaveDir=System.IO.Path.GetDirectoryName(xmlSaveLocation) 

' Create directory if it doesn't exit 
If (Not System.IO.Directory.Exists(xmlSaveDir)) Then 
    System.IO.Directory.CreateDirectory(xmlSaveDir) 
End If 

' now, use a file stream for the XmlWriter, this will create or overwrite the file if it exists 
Using fs As New FileStream(xmlSaveLocation, FileMode.OpenOrCreate, FileAccess.Write) 
    Using writer As XmlWriter = XmlWriter.Create(fs) 
     ' use the writer... 
     ' and, when ready, flush and close the XmlWriter 
     writer.Flush() 
     writer.Close() 
    End Using 
    ' flush and close the file stream 
    fs.Flush() 
    fs.Close() 
End Using 
+0

Dank für Ihre Hilfe danken, aber leider, wenn ich Ihren Code verwenden, erhalte ich eine Ausnahme: Der Zugriff auf den Pfad ‚C: \ temp \ crawl \ unkomprimierte \ fullCrawl. xml 'wird abgelehnt. wenn ich zum filestream für xmlwriter teil komme. Vielen Dank. –

+0

Ich denke, diese Ausnahme wird verursacht, weil der Teil: System.IO.Directory.CreateDirectory (xmlSaveLocation) erstellt: fullCrawl.xml als ein Verzeichnis und nicht als eine Datei, und der FileStreamer versucht, dieses Verzeichnis zu öffnen, als ob es ein war Datei. Kennen Sie eine Arbeit, ohne den Dateinamen als separates Stringstück hinzufügen zu müssen? Vielen Dank. –

+0

Yup, du hast Recht :) Ich habe den Code aktualisiert, jetzt sollte es Verzeichnis richtig erstellen. – nasskov

Verwandte Themen