Feedback

VB - wie in der CMD Pfad zu Datei ermitteln anhand des EXE-namens

Veröffentlicht von am 3/16/2009
(2 Bewertungen)
Der Titel beschreibt es doch schon ganz gut oder?

Wenn man in der CMD einen Dateinamen eingibt, der registriert ist,
oder in einem Systemvertzeichnis liegt,
wird das Programm ausgeführt.

Wenn man nun wissen will, WO diese Datei liegt, ist man relativ verlassen.

Hier eine verhältnismäßig effektive lösung.

NICHT UNTER VISTA GETESTET!!!


Hier der Thread, wo darüber gesprochen wurde:
http://www.vbarchiv.net/forum/id22_i56421t56344.html
Aufruf z.B.: txtPDFTKPath.Text = alg.GetSystemFile("pdftk")

    '''''' <summary>
    '''''' Stellt fest, ob in den Systemverzeichnissen eine Datei vorhanden ist
    '''''' und WO sie vorhanden ist.
    '''''' Aufruf Beispiel:
    '''''' txtPDFTKPath.Text = alg.GetSystemFile("pdftk")
    '''''' </summary>
    '''''' <param name="FileName">
    '''''' Dateiname mit oder ohne Erweiterung "pdftk" ODER "pdftk.exe"
    '''''' </param>
    '''''' <param name="extension">
    '''''' Die Dateiendung z.B.: .exe ODER exe ("." wird automatisch hinzugefügt)
    '''''' </param>
    '''''' <param name="DefaultFullPath">
    '''''' Der Standardwert der zurückgegeben wird, falls NICHTS gefunden wurde.
    '''''' </param>
    '''''' <returns></returns>
    '''''' <remarks></remarks>
    Public Function GetSystemFile(ByVal FileName As String, Optional ByVal extension As String = ".exe", Optional ByVal DefaultFullPath As String = "") As String
        Dim ext As String = extension
        If ext <> "" AndAlso Not ext.StartsWith(".") Then ext = "." & ext
        If FileName.EndsWith(ext) Then ext = ""

        Dim environmentVariables As IDictionary = Environment.GetEnvironmentVariables()
        Dim de As DictionaryEntry

        For Each de In environmentVariables
            If de.Key = "Path" Then
                Dim splt() As String
                splt = de.Value.ToString.Split(";")
                For i As Integer = 0 To splt.Length - 1
                    Dim combined As String = splt(i)
                    If combined <> "" AndAlso Not combined.EndsWith("\") Then combined = combined & "\"
                    combined = combined & FileName & ext
                    Try
                        If IO.File.Exists(combined) Then
                            Return combined
                        End If
                    Catch ex As Exception
                        MessageBox.Show("Fehler beim auslesen des Verzeichnisses." & vbCrLf & vbCrLf & "Meldung: " & vbCrLf & ex.Message, "Fehler...!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                    End Try
                Next
            End If
        Next de

        Return DefaultFullPath
    End Function

1 Kommentare zum Snippet

Koopakiller schrieb am 8/31/2014:
Interessante Idee, aber ein paar Anmerkungen zum Code an sich:
1.) Der Code ist Option Strict Off
2.) Die Environment.GetEnvironmentVariable dürfte effektiver sein als
das Durchlaufen aller Environment-Variablen.
http://msdn.microsoft.com/de-de/library/77zkk0b6.aspx
3.) Statt einer MessageBox solltest du die Exception nach außen
weiter leiten.
 

Logge dich ein, um hier zu kommentieren!