Ordner in AppData erstellen

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Ordner in AppData erstellen

    Hallo ihr Lieben,

    ich möchte prüfen, ob ein Ordner im ApplicationData-Verzeichnis existiert. Wenn dies nicht der Fall ist soll dieser erstellt werden.
    Dies mache ich wie folgt:

    VB.NET-Quellcode

    1. ​If Not IO.Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\DispoSan") = True


    Wenn die Condition True ist lege ich den Ordner wie folgt an:

    VB.NET-Quellcode

    1. ​IO.Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\DispoSan")


    Insgesamt sieht das wie folgt aus:

    VB.NET-Quellcode

    1. If Not IO.Directory.Exists(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\DispoSan") = True Then
    2. MsgBox((Environment.SpecialFolder.ApplicationData) & "...\DispoSan")
    3. IO.Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\DispoSan")
    4. End If


    Leider erstellt er mir keinen Ordner aber gibt mir mit einer vorangestellten Messagebox mit dem Inhalt

    Quellcode

    1. MsgBox((Environment.SpecialFolder.ApplicationData) & "\DispoSan")​
    folgendes aus: "26\DispoSan".

    Daher meine Frage:
    Warum erstellt er den Ordner nicht und was hat es mit diesem Pfad auf sich?

    Ich befürchte fast ich habe bei der Condition einen Fehler aber das wird sich hoffentlich zeigen.

    Danke für eure Antworten!

    Moritz Jökel schrieb:

    VB.NET-Quellcode

    1. MsgBox((Environment.SpecialFolder.ApplicationData) & "\DispoSan")​
    Fang an und mach Option Strict On.
    Dann siehst Du Dir dies hier an:

    VB.NET-Quellcode

    1. Dim folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    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!
    Ich habe mit IO.Directory.Exists noch nie gearbeitet, ich kann dir aber folgendes geben:

    VB.NET-Quellcode

    1. If My.Computer.FileSystem.DirectoryExists("C:\Users\" & uname & "\AppData\Roaming\DispoSan") Then
    2. MsgBox("Der Ordner existiert")
    3. Else
    4. My.Computer.FileSystem.CreateDirectory("C:\Users\" & uname & "\AppData\Romaing\DispoSan")
    5. MsgBox("Es wurde kein Verzeichnis gefunden. Wir haben eines für dich erstellt!")
    6. End If


    und

    Quellcode

    1. uname
    ist dann

    VB.NET-Quellcode

    1. Dim uname As String = Environment.UserName


    Damit funktionierts bei mir ausgezeichnet.

    Hoffe es hilft!
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Michdi schrieb:

    My.Computer.FileSystem.DirectoryExists


    Bitte kein My.Computer Schei*dreck! Verwende zum zusammenhängen von Pfaden die Klasse Path und deren statischen Funktion Combine(MSDN). Dann brauchst du dich nicht mit den Pfad-Abtrennzeichen umherschlagen.

    Moritz Jökel schrieb:

    Leider erstellt er mir keinen Ordne
    Doofe Frage, aber: Hast du schon mal nachgesehen, ob es den Ordner nicht schon gibt (Versteckt vielleicht?)

    Wenn ich den Code hier verwende:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\DispoSan"
    3. If (Not Directory.Exists(path) = True) Then
    4. Console.WriteLine("Ist nicht da")
    5. Directory.CreateDirectory(path)
    6. End If
    7. Console.WriteLine(path)
    8. End Sub

    dann wird mir der Ordner erstellt (auch wenn ich Path.Combine nicht verwende. Wollte nur zeigen, dass dein Code bei mir funzt)
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    Doofe Frage
    Environment.SpecialFolder.ApplicationData = 26. Der TE arbeitet mit Strict Off.
    @Michdi Das geht so:

    VB.NET-Quellcode

    1. Dim folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    da kannst Du dann Deine Unterverzeichnisse anhängen.
    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!

    Radinator schrieb:

    Bitte kein My.Computer Schei*dreck!

    Danke für deinen Hinweis! Auch das humorvolle Video im Spoiler hat mir doch ein Lächeln auf die Lippen gezaubert. Made my day!

    Wenn ich die Strict-On Option aktiviere werden mir 15 Fehler angezeigt die teilweise tief in meinem Projekt verankert sind, daher muss ich das irgendwie anders lösen...

    Die Veriante mit My.Computer wäre meine Notlösung die ich ebenfalls ungern verwende.

    Danke schonmal an Alle die geholfen haben!!!

    Moritz Jökel schrieb:

    werden mir 15 Fehler angezeig
    Die du beheben musst.
    Ich gehe mal davon aus, dass das Fehler sind, die sich um Konvertierungsprobleme handeln

    VB.NET-Quellcode

    1. Dim i As Integer = "5"


    Moritz Jökel schrieb:

    muss ich das irgendwie anders lösen...
    Nicht anders lösen, sondern die Fehler beheben ;D

    Moritz Jökel schrieb:

    My.Computer wäre meine Notlösung
    Lass ich nicht gelten. Das ist keine Notlösung, sondern einfach ein Kompatibilitätsmist aus VB6.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @Radinator Jou.

    Moritz Jökel schrieb:

    tief in meinem Projekt verankert
    Die meisten Fehler sehen üblicherweise so aus:

    VB.NET-Quellcode

    1. Label1.Text = 15
    2. Dim val As Integer = TextBox1.Text
    Da musst Du lediglich die richtige Konvertierung machen:

    VB.NET-Quellcode

    1. Label1.Text = 15.ToString()
    2. Dim val As Integer = Integer.Parse(TextBox1.Text)
    Hier ohne Bereichstest, d.h. Dim val As Integer = Integer.Parse("Roulade mit Klößen") geht schief.
    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!