Speichern und Lesen in AppData

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy2002.

    Speichern und Lesen in AppData

    Hallo,
    ich habe ein Problem und finde gerade keine Lösung.
    Ich Erstelle wenn nicht Vorhanden in Appdata einen Ordner, (Das geht) wenn ich dann in diesen Ordner Schreiben will, wird mir der Zugriff verweigert. (Pfad wird Korrekt angegeben.) Wäre für Hilfe sehr Dankbar!!
    Spoiler anzeigen

    Quellcode

    1. 'Hier werden der Pfad erstellt, der mittels mainPatch dann aufgerufen wird.'
    2. Private Filename As String = "Accountdaten.xml"
    3. Dim directoryName As String = "AndyNET"
    4. Dim appDataPath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    5. Dim mainPath As String = Path.Combine(appDataPath, directoryName)

    Ausgeführt wird er hier:

    Quellcode

    1. Private Sub Write()
    2. If File.Exists(Filename) Then
    3. File.Delete(Filename)
    4. End If
    5. If (Not Directory.Exists(mainPath) = True) Then
    6. Directory.CreateDirectory(mainPath)
    7. End If
    8. Dim Serializer As XmlSerializer = New XmlSerializer(Accountliste.GetType)
    9. Dim XStream As StreamWriter
    10. Dim EmptyNamespace As New XmlSerializerNamespaces()
    11. EmptyNamespace.Add("", "")
    12. Using FileStream As New FileStream(mainPath, FileMode.Create)
    13. XStream = New StreamWriter(FileStream, Encoding.UTF8)
    14. Serializer.Serialize(XStream, Accountliste, EmptyNamespace)
    15. FileStream.Close()
    16. End Using
    17. End Sub

    Der Fehler:
    ​System.UnauthorizedAccessException: "Der Zugriff auf den Pfad "C:\Users\info\AppData\Roaming\AndyNET" wurde verweigert."

    Ja ups,
    Hab etwas gefummelt sieht nun so aus.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim appDataPath As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\AndyNet"
    2. Dim Filename As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\AndyNet\Accountdaten.xml"

    und

    VB.NET-Quellcode

    1. Private Sub Write()
    2. If File.Exists(Filename) Then
    3. File.Delete(Filename)
    4. End If
    5. If (Not Directory.Exists(appDataPath) = True) Then
    6. Directory.CreateDirectory(appDataPath)
    7. Dim Serializer As XmlSerializer = New XmlSerializer(Accountliste.GetType)
    8. Dim XStream As StreamWriter
    9. Dim EmptyNamespace As New XmlSerializerNamespaces()
    10. EmptyNamespace.Add("", "")
    11. Using FileStream As New FileStream(Filename, FileMode.Create)
    12. XStream = New StreamWriter(FileStream, Encoding.UTF8)
    13. Serializer.Serialize(XStream, Accountliste, EmptyNamespace)
    14. FileStream.Close()
    15. End Using
    16. End If
    17. End Sub



    Problem hier, hier wird die xml nicht erstellt, der Ordner bleibt leer. Bzw. Sie wird im Applikation Verzeichnis Erstellt.
    Hab schon überlegt wie ich den Speicherpfad dem Filestream übergebe, habe da noch keine Lösung gefunden.
    Edit: Lesen geht, sobald ich Manuel die xml in das Verzeichnis lege, kann ich es öffnen, wenn ich Speichere wird die Gelöscht und die Daten sind futsch
    Lesen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Read()
    2. If Accountliste Is Nothing Then
    3. Accountliste = New List(Of Account)
    4. End If
    5. Dim Serializer As XmlSerializer = New XmlSerializer(Accountliste.GetType)
    6. Dim EmptyNamespace As New XmlSerializerNamespaces()
    7. EmptyNamespace.Add("", "")
    8. Using FileStream As New FileStream(Filename, FileMode.Open)
    9. Accountliste = CType(Serializer.Deserialize(FileStream), List(Of Account))
    10. FileStream.Close()
    11. End Using
    12. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Andy2002“ ()

    Gefummelt trifft es gut, du erstellt die Datei nur, wenn der Ordner nicht existiert.

    PS: Path.Combine!!!!!!!!!!!!!!!!!

    Andy2002 schrieb:

    VB.NET-Quellcode

    1. Directory.CreateDirectory(appDataPath)
    Diesen Befehl kannst Du immer ausführen, egal, ob das Verzeichnis existiert oder nicht.
    Danach ist das Verzeichnis da.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Oh man Rofl, ich hab das "end If" Falsch gesetzt! LOL

    Spoiler anzeigen

    NEU

    VB.NET-Quellcode

    1. Private Sub Write()
    2. If File.Exists(Filename) Then
    3. File.Delete(Filename)
    4. End If
    5. If Not Directory.Exists(appDataPath) Then
    6. Directory.CreateDirectory(appDataPath)
    7. End If "Hier ist es Korrekt"
    8. Dim Serializer As XmlSerializer = New XmlSerializer(Accountliste.GetType)
    9. Dim XStream As StreamWriter
    10. Dim EmptyNamespace As New XmlSerializerNamespaces()
    11. EmptyNamespace.Add("", "")
    12. Using FileStream As New FileStream(Filename, FileMode.Create)
    13. XStream = New StreamWriter(FileStream, Encoding.UTF8)
    14. Serializer.Serialize(XStream, Accountliste, EmptyNamespace)
    15. FileStream.Close()
    16. End Using
    17. End Sub

    ALT

    VB.NET-Quellcode

    1. Private Sub Write()
    2. If File.Exists(Filename) Then
    3. File.Delete(Filename)
    4. End If
    5. If Not Directory.Exists(appDataPath) Then
    6. Directory.CreateDirectory(appDataPath)
    7. Dim Serializer As XmlSerializer = New XmlSerializer(Accountliste.GetType)
    8. Dim XStream As StreamWriter
    9. Dim EmptyNamespace As New XmlSerializerNamespaces()
    10. EmptyNamespace.Add("", "")
    11. Using FileStream As New FileStream(Filename, FileMode.Create)
    12. XStream = New StreamWriter(FileStream, Encoding.UTF8)
    13. Serializer.Serialize(XStream, Accountliste, EmptyNamespace)
    14. FileStream.Close()
    15. End Using
    16. End If "Hier ist es Falsch"
    17. End Sub


    Manchmal ist es auch einfach zum Schießen! Und ich hab mich Tage durch learn.microsoft.com/de-de/dotnet gewühlt...
    Thema erledigt, Fehler gefunden! Läuft.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Andy2002“ ()

    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Jo danke, fast vergessen den code zu verschlanken, Tippe meistens aus dem Kopf und später bei der Prüfung wird noch mal Korrigiert. Grummel das mir das verschobene end if nicht aufgefallen ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()