Exsistiert Freigegebenes Verzeichniss?

  • VB.NET

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

    Exsistiert Freigegebenes Verzeichniss?

    Huhu leute :)

    ich will eine abfrage machen ob freigebenes VErzeichniss XYZ exsistiert.

    hier mein aktueller CODE dafür:

    VB.NET-Quellcode

    1. Public Function FolderExists(ByVal sFolder As String) As Boolean
    2. 'Der Parameter sFolder enthält das zu prüfende Verzeichnis
    3. On Error Resume Next
    4. Dim F As Short
    5. sFolder = Trim(sFolder)
    6. If Microsoft.VisualBasic.Right(sFolder, 1) <> "\" Then sFolder = sFolder & "\"
    7. F = FreeFile()
    8. FileOpen(F, sFolder & "test.tmp", OpenMode.Output)
    9. FolderExists = (Err.Number = 0)
    10. FileClose(F)
    11. Kill((sFolder & "test.tmp"))
    12. On Error GoTo 0
    13. End Function
    14. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    15. Dim Foldercheck As String
    16. 'UPGRADE_WARNING: Die Standardeigenschaft des Objekts txtServerpfad.Text konnte nicht aufgelöst werden. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
    17. Select Case FolderExists(txtServerpfad.Text)
    18. Case "True"
    19. MsgBox(Title:="Info", Prompt:=txtServerpfad.Text & " ist erreichbar!", _
    20. Buttons:=vbInformation)
    21. Case "False"
    22. MsgBox(Title:="Info", Prompt:=txtServerpfad.Text & " ist nicht erreichbar oder Zugriff Verweigert!", _
    23. Buttons:=vbInformation)
    24. End Select
    25. End Sub


    funktioniert an sich alles ganz gut nur kriege ich somit nur verzeichnisse angezeigt bei denen ich schreibzugriff habe verzeichnisse mit lesezugriff kriege ich nicht angezeigt

    habt ihr vllt eine bessere lösung für mich ?

    prinzipiell will ich ja nur wissen ob des verzeichniss exsistiert nicht nur ob ich zugriff habe wie ichs da auslesen kann jetzt

    lg

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „datsspeed“ ()

    des funktioniert ja so perfekt dodo :) mein problem is nur verzeichnisse auf dene ich nur lesezugriff habe kann ich ja keine datei anlegen und da möchte ich eine extra exception einprogrammieren :)
    die dann sagt des verzeichniss exsestiert ich habe zugriff drauf aba nur lese zugriff...

    der code is von nem älteren VB6 projekt des ein vorgänger von mir mal geschrieben hat ka. wo er den code her hat wir haben ja hier unsere datenbank für jedes problem eine lösung^^


    lg :) und danke
    Auch VB6 Codes können Fehlerquellen sein, vorallem mit On Error Goto ... eigentlich müsste so ein Code hier sofort zensiert werden damit niemand ihn sieht und ggf. benutzen kann.

    Also erstmal nach .NET umschreiben mit der Dateischreiben. Ansonsten kannst du ja (auch mit den .NET Klassen) einfach das Verzeichnis einlesen und versuchen über .GetFiles() die Dateien zu bekommen. Funktioniert das nicht, wird das Verzeichnis wohl nicht existieren und du bekommst sogar noch eine richtige IO Exception und nicht so ein Murks wie bie VB6.
    okay dodo darauf bin garnet gekommen mit dem getfiles xD

    ich kipp mir gleich nochma ne tasse kaffe rein ;)

    neuer code folgt in nächster halben stunde

    lg :)


    neuer code:

    VB.NET-Quellcode

    1. Public Function Folder_accessible(ByVal sFolder As String)
    2. sFolder = sFolder.Trim
    3. Dim f As Integer = 0
    4. If Microsoft.VisualBasic.Right(sFolder, 1) <> "\" Then sFolder = sFolder & "\"
    5. Try
    6. f = FreeFile()
    7. FileOpen(f, sFolder & "test.tmp", IO.FileMode.OpenOrCreate)
    8. FileClose(f)
    9. IO.File.Delete(sFolder & "test.tmp")
    10. Return "TrueAccess"
    11. Catch
    12. Try
    13. If IO.Directory.GetFiles(sFolder).Length <= 0 Then
    14. Return "Readonly"
    15. End If
    16. Catch
    17. Return "NoAccess"
    18. End Try
    19. End Try
    20. Return 0
    21. End Function
    22. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    23. Select Case Folder_accessible(txtServerpfad.Text)
    24. Case "TrueAccess"
    25. MessageBox.Show(txtServerpfad.Text & " ist erreichbar mit vollzugriff!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
    26. Case "NoAccess"
    27. MessageBox.Show(txtServerpfad.Text & " ist nicht erreichbar oder der Zugriff ist nicht gestattet!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
    28. Case "Readonly"
    29. MessageBox.Show(txtServerpfad.Text & " ist erreichbar jedoch nur lesezugriff!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
    30. End Select
    31. End Sub


    is des so besser?

    lg

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

    Dodo schrieb:

    eigentlich müsste so ein Code hier sofort zensiert werden damit niemand ihn sieht
    Binnichnich für. Auch der schlimmste GurkenCode ist immer noch nützlich, nämlich als abschreckendes Beispiel.

    Die ganze Methode scheint mir sinnlos, denn ein DirectoryInfo stellt auch die Attributes bereit, und sagt also direkt aus, ob es existiert, und obs Readonly ist.
    Also das Rad neu erfunden, weil man zuwenig im ObjectBrowser/ObjektKatalog sich die Sachen anguckt.
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim di As New System.IO.DirectoryInfo("c:\Temp")
    3. Dim cc As System.Security.AccessControl.DirectorySecurity = Nothing
    4. If di.Attributes <> -1 Then
    5. cc = di.GetAccessControl() ' dieses hier
    6. End If
    7. If Not di.Exists Then
    8. MessageBox.Show("existiert nicht")
    9. End If
    10. End Sub
    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!
    danke für den tipp roadfromgermany

    erstmal die verbesserung von deinem code :


    VB.NET-Quellcode

    1. Dim di As New System.IO.DirectoryInfo("C:\TEMP") 'Da kommt ein Netzwerkpfad rein
    2. Dim cc As System.Security.AccessControl.DirectorySecurity = Nothing
    3. If Not di.Exists Then
    4. MessageBox.Show("existiert nicht")
    5. Exit Sub
    6. End If
    7. If di.Attributes <> -1 Then
    8. cc = di.GetAccessControl() ' dieses hier ja schön woher krieg ich aber den readonly oder readandwriteaccess parameter da her?
    9. End If



    lg :)
    Sieh Dir mal die Properties und Methoden an:

    Ergreif die Initiative, teste das ganze mit offenen und geschützten Laufwerken und Du wirst sehen und Dein Problem allein lösen. :D
    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 erkenne zwischen nem schreibgeschützten und nem vollzugriffsordner da keine unterschiede O.o

    @RodFromGermany

    kannst du mir des bitte genauer erklären bitte :/ ?

    @ErfinderDesRades

    geht des ganz sicher au mit netzwerk ordnern z.b.

    \\PCXYZ\Ordner1?

    lg

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

    datsspeed schrieb:

    kannst du mir des bitte genauer erklären bitte :/ ?
    Setze auf das End If in Deinem code einen Haltepunkt und wenn das Programm unterbrochen ist, klickst Du auf die Variable cc und drückst die Tasten Shift+F9, dann bekommst Du genau das angezeigt.
    (Fast) alles, was da angezeigt wird, kannst Du im Programm abfragen. Spiele ein wenig rum, drücke mal die F1-Taste, wenn Du zuvor auf eine Property / Prozedur geklickt hast und lies, was Bill dazu schreibt.
    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!
    des mit driceotry exsist und mit fileinfos weis ich ja wie geht und damit kommt ich ja klar :)

    nur mit dem getaccescontrol kann ich nichts anfangen

    ich habe nen haltepunkt gesetzt und versucht die unterschiede zwischen nem readonly netzwerkpfad und nem vollzugriffs netzwerkpfad u checken.

    unterschiede sind hierbei aber iwie nur verzeichniss namen :/

    lg
    Guten morgen.

    Problem ist nach wie vor offen ich habe bis jetzt keine Lösung gefunden mit dem GetAccessControl()

    Zwischen Verzeichnissen wo ich nur lesen kann und Verzeichnissen wo ich voll zugriff habe sind die Attribute identisch wie auch die Einträge in AccessRightType und AccessRulesType

    hoffe ihr könnt mir einen Tipp geben.

    Lg und einen schönen Tag

    :thumbsup:
    Das hier hast Du noch nicht begriffen:

    ErfinderDesRades schrieb:

    Ob ein Directory existiert meldet die DirectoryInfo-Klasse, und ob eine Datei Readonly ist, weiß das FileInfo.


    Sieh Dir die Properties der Files in diesem Verzeichnis an.
    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!
    Entweder Du liest das Verzeichnis aus, da hast Du die Dateien, oder Du versuchst, eine Datei da drin zu erstellen, das kannst Du mit Try / Catch und der richtigen Exception-Instanz abtesten.
    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!
    Du bist hier der Herr im Thread, Du hast das Problem und bekommst eine Reihe von Möglichkeiten genannt, mit denen Du Dein Problem mehr oder weniger gut lösen kannst.
    Probiere sie einfach der Reihe nach aus und sieh, welche Lösung Deinem Problem am besten entspricht.

    datsspeed schrieb:

    VB.NET-Quellcode

    1. On Error Resume Next
    ist hier allerdings Obergrütze.
    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!