Exists Abfrage Ohne String

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von TheJoey.

    Exists Abfrage Ohne String

    Hey Leute,
    da die SuFu nichts ausgespuckt hat, und ich nach den Spezialregeln zu dem Schluss gekommen bin, dass ich hier richtig bin (Bitte korrigiert mich, wenn ich falsch liege),
    hier meine Frage: Ist es möglich, in einer Directory.Exists Abfrage keinen String zu verwenden? Bin noch ein relativer Anfänger was VB betrifft. Was ich genau meine ist folgendes:

    VB.NET-Quellcode

    1. If IO.Directory.Exists(Speicherort.Text & "Erweiterung") = True Then
    2. MsgBox (Es existiert.)
    3. End If

    Wenn ich das so laufen lasse kommt zwar keine Exception, aber die MsgBox spuckt auch nichts aus, obwohl es den Ordner eindeutig gibt.
    Ich hoffe ihr könnt mir helfen.
    Vielen Dank im Voraus, TheJoey

    Willkommen im Forum :thumbsup:

    Du könntest, anstatt die beiden Strings mit dem &-Zeichen zu verbinden, es mal mit System.IO.Path.Combine(Speicherort.Text & "Erweiterung") versuchen.
    Du hast mit Sicherheit nen Fehler, beim Zusammensetzen des Pfades.

    Eine Alternative zu Directory-Klasse ist DirectoryInfo.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim dI As New IO.DirectoryInfo(IO.Path.Combine("d:\downloads", "test"))
    3. MessageBox.Show(dI.Exists.ToString())
    4. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Du könntest mit Directoryinfo arbeiten, dan kannst du einfach abfragen ob der ordner existiert. Benutze beim verbinden von pfaden bitte System.IO.Path.Combine wie es nafets3646 geraten hat ;)
    Vllt liegt es daran, dass du in Speicherort.Text keinen Backslash am Ende hast.
    Schreib mal - außerhalb eines If-Statements - einfach MsgBox(Speicherort.Text & "Erweiterung") :)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    @ThePlexian
    Bitte schlage VB-Anfängern nicht die alten Funktionen aus Microsoft.VisualBasic vor, später gewöhnen sich die nur dran und werden später angemotzt, weil sie die "bösen Funktionen" etc. nutzen.
    Außerdem handelt es sich bei dem Programm um Nutzereingaben, die entweder einen Backslash am Ende haben oder nicht, genau auf das prüft System.IO.Path.Combine() und verbindet diese beiden Pfade so, dass es einen gültigen Pfad ergibt.

    @TheJoey
    Dann zeig mal deinen Pfad ;).

    nafets3646 schrieb:

    Bitte schlage VB-Anfängern nicht die alten Funktionen aus Microsoft.VisualBasic vor, später gewöhnen sich die nur dran und werden später angemotzt, weil sie die "bösen Funktionen" etc. nutzen.
    Außerdem handelt es sich bei dem Programm um Nutzereingaben, die entweder einen Backslash am Ende haben oder nicht, genau auf das prüft System.IO.Path.Combine() und verbindet diese beiden Pfade so, dass es einen gültigen Pfad ergibt.


    Ich bevorzuge ja auch Path.Combine(), es ging mir nur darum erstmal herauszufinden ob der Pfad überhaupt gültig ist :)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    @TheJoey:
    System.IO.Path.Combine(Speicherort.Text & "Erweiterung")

    Gemeint war das so:
    Anstelle von

    VB.NET-Quellcode

    1. Dim Pfad = "C:\Ordner" & "Datei.txt"

    Solltest Du das so schreiben:

    VB.NET-Quellcode

    1. Dim Pfad = System.IO.Path.Combine("C:\Ordner", "Datei.txt")


    Und wenn Du das verstanden hast, fällt Dir auf, dass Du anstelle von zwei festen Strings auch beispielsweise den Text der TextBox einfügen kannst.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    @TheJoey:
    System.IO.Path.Combine(Speicherort.Text & "Erweiterung")

    Gemeint war das so:
    Anstelle von

    VB.NET-Quellcode

    1. Dim Pfad = "C:\Ordner" & "Datei.txt"

    Solltest Du das so schreiben:

    VB.NET-Quellcode

    1. Dim Pfad = System.IO.Path.Combine("C:\Ordner", "Datei.txt")


    Und wenn Du das verstanden hast, fällt Dir auf, dass Du anstelle von zwei festen Strings auch beispielsweise den Text der TextBox einfügen kannst.

    Oke, ich habs mal ausprobiert.

    VB.NET-Quellcode

    1. Dim Pfad2 = System.IO.Path.Combine(Speicherort.Text, "Unterordner")


    Und nachher dann.

    VB.NET-Quellcode

    1. If IO.Directory.Exists(Pfad2) = True Then


    Aber auch hier, kommt beim Dim Pfad2 = System.IO.Path.Combine(Speicherort.Text, "Unterordner") dann wieder "illegales Zeichen"
    @TE , meinst Du soetwas,

    VB.NET-Quellcode

    1. Dim Speicherort As String = Application.StartupPath
    2. If IO.Directory.Exists(Speicherort & "\Erweiterung") = True Then
    3. MsgBox("Exist")
    4. Else
    5. MsgBox("Don't exist!")
    6. End If

    Application.StartupPath gibt den Pfad an, aus dem das Programm gestartet wird.

    Mfg.eniking1998
    Nun ja, hier erstmal eine Erklärung, was das Programm machen soll. Es geht sich dabei um ein Spiel, und bei diesem Spiel habe ich eine Mod. Jetzt soll das Programm eigentlich nicht viel mehr machen, als die Mod zu aktivieren/deaktivieren, indem es den Ordner umbenennt, dazu schreibt es beim ersten Start den Speicherort in deine Textdatei (über die Ordner-Auswahl) und bei den nachfolgenden Starts soll es diese Datei auslesen, und den Ordner umbenennen, dafür soll es nur vorher nachgucken, ob der Ordner bereits umbenannt ist, um ihn dann wieder richtig zu benennen. Der Speicherort ist C:/Programme/SpieleOrdner/Mods
    @TheJoey: Ok. Und was steht in der TextBox? Poste es am besten per Code-Tag im Forum.
    Den macht man so: <code>Hier der Inhalt</code>
    Nur muss man die <>-Klammern durch []-Klammern ersetzen.

    @enIking1998: Das ist ziemlich ungünstig, wenn der Ordner außerhalb des Programmes verändert wurde.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hi
    @enIking1998: schau' dir bitte mal die Beiträge vor deinem an. Es wurden bereits elegante Lösungen gepostet. Zur Pfadverknüpfung ist System.IO.Path.Combine wesentlich besser geeignet, da es zum einen eine abstrakte Darstellung der Pfadverknüpfung ist (das bedeutet, es funktioniert auf jeden Fall auf dem lokalen System, wenn es korrekt verwendet wird) und zum anderen verhindert, dass eine Dopplung des Trennzeichens auftritt, wenn Speicherort bereits auf ein Trennzeichen endet.
    Die Abfrage auf True ist überflüssig.
    Häufig möchte man btw. nicht das Anwendungsverzeichnis (das btw. System.Windows.Forms-spezifisch ist, da dort Application liegt), sondern System.IO.Directory.GetCurrentDirectory(). In deinem Fall würde ich allerdings erst mal nachsehen, ob es nicht einen Registrierungseintrag gibt, der den Pfad des Spiels enthält. Außerdem wäre es eleganter, ein Flag abzuspeichern, in dem festgelegt wird, ob der Mod aktiv ist. So kann man auf mögliche Fehler (unerwartete Programmbeendigung, etc.) reagieren.

    Gruß
    ~blaze~