Ordner zurück

  • VB6

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von alchimist.

    Wie wärs wenn du einfachwenn du den Teil
    Der Nach dem letzen backslash kommt abschneidest ?
    Also wenn der Pfad z.B. C:\Der\Test heißt
    schneidest du nach Der ab, sodass
    nur noch C:\Der da steht. So vielleicht :

    Function RootDir(ByVal Path As String) As String
    Path = Left$(Path, InStrRev(Path, "\", Len(Path) - 1))
    If Mid(Path, Len(Path), 1) <> "\" Then
    Path = Path & "\"
    End If

    RootDir = Path
    End Function


    Die Funktion gibt aber immer ne Zeichenfolge mit Backslash am Ende zuück

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

    in einem anderen forum hat jmd etwas noch besseres geposted :)

    Private Function GetPrevPath(Path As String, NumBack As Integer) As String
    Dim tmpVar As Integer, cnt As Integer, Flag As Boolean
    If NumBack = 0 Then NumBack = 1
    Flag = True

    tmpVar = Len(Path)
    For cnt = 1 To NumBack
    tmpVar = InStrRev(Path, "\", tmpVar)
    tmpVar = tmpVar - 1
    If tmpVar = -1 Then
    Flag = False
    Exit For
    End If
    Next cnt

    GetPrevPath = ""
    If Flag Then GetPrevPath = Left(Path, tmpVar)
    End Function
    Hallo hax,

    was bedeutet für dich besser? In deiner Fragestellung wolltest du ein Verzeichnis zurückspringen. Der genannte Vorschlag von Unknown ist doch genau die gesuchte Lösung, oder?

    Die andere Lösung bietet die Möglichkeit auch mehrere Verzeichnisstufen zurückzuspringen, ist sie deshalb besser?

    Was hältst du davon?

    Private Function getPrevPath(strPath As String) As String
    getPrevPath = CreateObject("Scripting.FileSystemObject").GetFolder(strPath).ParentFolder.Path
    End Function

    Gruß Markus

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

    Hallo hax,

    klar darfst du :) ,
    wenn du die zweite Lösung aber besser (=geeigneter?) findest, gehe ich davon aus, du suchtest nach einer Prozedur, die nicht nur eine Ebene in der Hierarchie zurückspringt, sondern beliebige Stufen , explizit gefragt hattest du aber nach einer Prozedur, die nur eine Stufe zurückspringt. Ich habe deine Aussage einfach immer noch nicht verstanden und vielleicht beherbergt die zweite Prozedur noch einen weiteren Vorteil, außer den des mehrstufigen Rücksprungs.
    Denn ich finde die zweite Prozedur ein wenig chaotisch geproggt, das hätte man eleganten lösen können. Evtl verrätst du mir ja, was an der zweiten Lsg besser ist?

    Sorry, aber diese Nachricht entstand echt nur aus Neugier

    Gruß Markus
    @Markus, willst du die best aussehnste, nicht von
    externen dlls abhängige funktion sehen mit der man
    beliebig viele verzeichnisse zurückspringen kann ?
    (es sei denn, man will mehr verzeichnisse zurückspringen
    als eigentlich möglich)
    hier ist sie :

    Function GetParentDir(ByVal strPath As String, Optional iParentDirNo As Integer = 1) As String
    Dim Directory() As String
    Dim i As Integer

    If Right$(strPath, 1) = "\" Then
    strPath = Left$(strPath, Len(strPath) - 1)
    End If

    Directory() = Split(strPath, "\")
    strPath = vbNullString

    If UBound(Directory) - iParentDirNo >= 0 Then
    For i = 0 To UBound(Directory) - iParentDirNo
    strPath = strPath & Directory(i) & "\"
    Next i
    End If

    GetParentDir = strPath
    End Function

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

    Hallo Unknown,

    gefällt mir schon recht gut :] aber warum keine externen Dlls? ;)

    Die Idee mit Split ist einfach elegant, das stimmt, aber warum nicht so ("Wer Split sagt muss auch Join sagen"):

    Function GetParentDir_Alt(ByVal strPath As String, Optional iParentDirNo As Integer = 1) As String
    Dim Directory() As String

    If Right$(strPath, 1) = "\" Then strPath = Left(strPath, Len(strPath) - 1)
    Directory() = Split(strPath, "\")

    If UBound(Directory) - iParentDirNo >= 0 Then
    ReDim Preserve Directory(0 To UBound(Directory) - iParentDirNo)
    GetParentDir_Alt = Join(Directory(), "\") & "\"
    End If

    End Function

    So, ich hoffe, es beginnt nun nicht ein Streit über die beste, schönste usw. Prozedur....auch wenn ich ihn entfacht haben sollte. ;)

    Gruß Markus
    Jau, die Funktion is schön,aber keine Angt hier wird kein Streit
    entfachen ( zumindest werd ich nich dran beteiligt sein)
    dazu bin ich einfach zu faul/unkreativ ;)

    Das mit den externen dlls war einfach so gemeint das
    man nicht schon von anderen Programmieren in dlls
    eingebaute Funktionen nutzen sollte, sonst hättest
    du ja mit dem FileSystemObject schon gewonnen,
    was hätt ich noch groß schreiben sollen :)

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