Automatisch 1 of meer directories terug gaan

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
Stel je het volgende voor:

Ik heb een folder browsing dialog. Via een knop roep ik deze aan. De folder die ik kies is:
C:\Program Files\Microsoft Visual Studio 8\Common7.

Nu wil ik dat er het volgende in een textbox verschijnt:
C:\Program Files\Microsoft Visual Studio 8\

Het is dus de bedoeling dat ie één folder naar beneden gaat.

Hier is nog een voorbeeld. Kies je:
C:\Program Files\Mozilla Firefox\chrome\icons\default
als folder, dan moet dit in de textbox vershijnen:
C:\Program Files\Mozilla Firefox

In dit voorbeeld gaat ie 3 directories terug naar beneden.

Weet iemand hoe dit moet? Ik zweer ooit ergens een voorbeeld gevonden te hebben, maar ik kan niet meer achterhalen waar dat was.
 
Dit werkt voor 1 dir. Denk wel dat het op een of andere manier simpelder moet kunnen.

Code:
            Dim openDialog As New OpenFileDialog
            openDialog.InitialDirectory = My.Settings.save_mediaDir
            openDialog.ShowDialog()

            My.Settings.save_mediaDir = openDialog.FileName.Substring(0, openDialog.FileName.Length - StrReverse(openDialog.FileName).IndexOf("\"))
            My.Settings.Save()
 
Hmmm...

Ik vat jouw code niet echt. Waar dient dat My.Settings.save_mediaDir precies voor? Dit geeft errors bij mij.
Dit is de originele code die ik gebruik:

Code:
'String maken
        Dim RememberSteamDir As String

'Als de gebruiker op OK klikt, plaats dan het volledige pad naam plus bestand in the tbVMFloc textbox
        If ofdVMFloc.ShowDialog() = Windows.Forms.DialogResult.OK Then
            tbVMFloc.Text = ofdVMFloc.FileName

'Verkrijg de volledige directory path zonder bestandsnaam en plaats die in de string variabel RememberSteamDir 
            RememberSteamDir = Path.GetDirectoryName(ofdVMFloc.FileName)

'Vervolgens vragen we de inhoud van RememberSteamDir op via een messagebox.
            MsgBox(RememberSteamDir)

De messagebox moet dan diezelfde directory path weergeven, maar dan 1 of meerdere folder terug. Ik heb ff uitgezocht hoeveel folder hij terug moet, en dat is 3, niet 1.

Misschien heb je hier wat aan?
 
My.Settings.save_mediaDir is een user setting van dat project. Als je niet weet wat een setting is in vb.net, google er dan ff op. Dient om info op te slaan (word dus omthouden nadat je afsluit, zeer handig) :)

Je kan dus ook gewoon dit doen

Code:
            Dim openDialog As New OpenFileDialog
            openDialog.InitialDirectory = "c:\"
            openDialog.ShowDialog()

            messagebox.show(openDialog.FileName.Substring(0, openDialog.FileName.Length - StrReverse(openDialog.FileName).IndexOf("\")))
 
My.Settings.save_mediaDir is een user setting van dat project. Als je niet weet wat een setting is in vb.net, google er dan ff op. Dient om info op te slaan (word dus omthouden nadat je afsluit, zeer handig) :)

Ah zo. Ik heb al zoiets, ik gebruik het register om into te laten op te slaan en terug te lezen. :)

Je kan dus ook gewoon dit doen

Code:
            Dim openDialog As New OpenFileDialog
            openDialog.InitialDirectory = "c:\"
            openDialog.ShowDialog()

            messagebox.show(openDialog.FileName.Substring(0, openDialog.FileName.Length - StrReverse(openDialog.FileName).IndexOf("\")))

Ja, dat had ik ook geprobeert maar het werkt niet, ik krijg gewoon de directory waarin het gekozen bestand in staat terug, en dus niet dat tie een paar dirs terug gaat.

Als ik dus een bestand kies in C:\Test\pic\image.jpg, dan geeft tie C:\Test\pic als resultaat terug in de msgbox.

Ik gebruik Visual Basic 2005, mocht dat van belang zijn. :P
 
Via de volgende code kun je een x aantal levels omhoog. Succes!

Code:
  Private Function FolderUp(ByVal folder As String, ByVal levelsup As Integer)
    Dim newfolder As String = ""
    Dim folders() As String

    If folder.EndsWith("\") Then folder = folder.TrimEnd("\")

    folders = folder.Split("\")
    For i As Integer = 0 To UBound(folders) - levelsup
      newfolder += folders(i) & "\"
    Next

    Return newfolder
  End Function
 
Laatst bewerkt:
Oh, nu voel ik me dom :eek:
Jouw oplossing is idd wel iets beter dan mijne xD
 
Bedankt mensen. :)

Nog één ding: ik heb nog nooit een gebruik gemaakt van een function en weet dus niet hoe ik die function aanroep. Het is ongetwijfeld niet hetzelfde als het aanroepen van een Sub.

Call FolderUp haalt niks uit.
 
in erti zn voorbeeld heb je dan zoiets

Code:
private sub blablabla

dim volledigeUrl as string = "c:\folder1\folder2\..."
dim aantalNiveausTerug as integer = 2

messagebox.show(volledigeUrl, aantalNiveausTerug)

end sub

erti is wel ff zn "as clause" vergeten zie ik. de eerste lij van die functie moet zijn:
Private Function FolderUp(ByVal folder As String, ByVal levelsup As Integer) As String
 
Een sub? Het ging toch om een function?

Ik moet erti zn function vanuit mijn button click event aanroepen, toch? Alles wat ik probeer geeft Name 'blabla is not declared errors.
 
sorry, ff niet goed gekeken.

deze code moet je gewoon in een sub (bv bij die button click event) zetten

Code:
dim volledigeUrl as string = "c:\folder1\folder2\..."
dim aantalNiveausTerug as integer = 2

messagebox.show(FolderUp(volledigeUrl, aantalNiveausTerug))
 
There you go! Zo werkt het prima. :D

Bedankt, etri en bn2vs!


Prachtig, dit forum. :D
 
@ erti: ik heb je functie ff wat ingekort :)

Code:
    Public Function folderUp(ByVal url As String, ByVal levelsUp As Integer) As String
        folderUp = "" : Dim folders() As String = url.Split(CChar("\"))
        url = url.TrimEnd(CChar("\"))

        For i As Integer = 0 To UBound(folders) - levelsUp
            folderUp &= folders(i) & "\"
        Next i
    End Function
 
@ erti: ik heb je functie ff wat ingekort :)

Code:
    Public Function folderUp(ByVal url As String, ByVal levelsUp As Integer) As String
        folderUp = "" : Dim folders() As String = url.Split(CChar("\"))
        url = url.TrimEnd(CChar("\"))

        For i As Integer = 0 To UBound(folders) - levelsUp
            folderUp &= folders(i) & "\"
        Next i
    End Function

Nogmaals dank! :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan