vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Ordner & Verzeichnisse   |   VB-Versionen: VB2008, VB2010, VB201213.11.13
Ist ein Verzeichnis leer?

Eine Routine zur schnellen Überprüfung, ob ein Ordner Unterordner oder Dateien enthält (Nutzung von Windows-APIs)

Autor:   Manfred BohnBewertung:     [ Jetzt bewerten ]Views:  7.570 
ohne HomepageSystem:  Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Die Frage, wie man effizient überprüfen kann, ob ein Ordner leer ist, wird hier diskutiert:
http://stackoverflow.com/questions/755574/how-to-quickly-check-if-folder-is-empty-net

Der folgende Code gehört in ein Standard-Modul, das den Namespace "System.Runtime.InteropServices" importiert.

Die Funktion "IsDirectoryEmpty" erwartet den Pfad des zu prüfenden Ordners.

Private ReadOnly INVALID_HANDLE_VALUE As New IntPtr(-1)
 
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Private Structure WIN32_FIND_DATA
  Public dwFileAttributes As UInteger
 
  Public ftCreationTime As System.Runtime.InteropServices.ComTypes.FILETIME
  Public ftLastAccessTime As System.Runtime.InteropServices.ComTypes.FILETIME
  Public ftLastWriteTime As System.Runtime.InteropServices.ComTypes.FILETIME
 
  Public nFileSizeHigh As UInteger
  Public nFileSizeLow As UInteger
  Public dwReserved0 As UInteger
  Public dwReserved1 As UInteger
 
  <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
  Public cFileName As String
 
  <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=14)> _
  Public cAlternateFileName As String
End Structure
 
<DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Function FindFirstFile(ByVal lpFileName As String, _
  ByRef lpFindFileData As WIN32_FIND_DATA) As IntPtr
End Function
 
<DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
Private Function FindNextFile(ByVal hFindFile As IntPtr, _
  ByRef lpFindFileData As WIN32_FIND_DATA) As Boolean
End Function
 
<DllImport("kernel32.dll")> _
Private Function FindClose(ByVal hFindFile As IntPtr) As Boolean
End Function
''' <summary>Enthält der Ordner mindestens einen Unterordner oder eine Datei?</summary>
''' <param name="path">der zu prüfende Ordner</param>
Public Function IsDirectoryEmpty(ByVal path As String) As Boolean
 
  If String.IsNullOrEmpty(path) Then
    Throw New ArgumentNullException(path)
  End If
 
  If IO.Directory.Exists(path) Then
    If path.EndsWith(IO.Path.DirectorySeparatorChar.ToString()) Then
      path += "*"
    Else
      path += IO.Path.DirectorySeparatorChar + "*"
    End If
 
    Dim findData As New WIN32_FIND_DATA
    Dim findHandle As System.IntPtr = FindFirstFile(path, findData)
 
    If findHandle <> INVALID_HANDLE_VALUE Then
      Try
        Dim empty As Boolean = True
        Do
          If findData.cFileName <> "." AndAlso _
            findData.cFileName <> ".." Then
            empty = False
          End If
        Loop While empty And FindNextFile(findHandle, findData)
 
        Return empty
      Finally
        FindClose(findHandle)
      End Try
    End If
 
    Throw New System.Exception("Failed to get directory first file", _
      Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()))
 
  End If
  Throw New IO.DirectoryNotFoundException()
End Function

Dieser Tipp wurde bereits 7.570 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel