vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2020
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Durchsuchen aller Laufwerke nach bestimmten Dateien 
Autor: Stümper
Datum: 17.05.20 08:28

Guten Tag,

ich versuche alle Laufwerke und Directory zu durchsuchen.

Das klappt an und für sich ganz gut, aber jetzt kommt das berühmte "Aber"

Beim Laufwerk c: stoße ich immer wieder auf Systemdateien, auf die der Zugriff verweigert wird.

Wie kann ich das verhindern.

Danke für jede Antwort.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Durchsuchen aller Laufwerke nach bestimmten Dateien 
Autor: Manfred X
Datum: 17.05.20 15:11

Hallo!

Die Benutzerkonten-Steuerung erlaubt dem bei Windows angemeldeten
Benutzer nur den Zugriff auf Dateien, deren Sicherheitseinstellungen
das erlauben. Was genau willst Du "verhindern"? Welche Operationen
möchtest Du mit diesen Ordnern oder Dateien ausführen?

Grundsätzlich mußt Du Dein Programm so gestalten, dass es mit der
Windows-Sicherheit "kooperiert" und nicht versucht, sie auszuhebeln.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Durchsuchen aller Laufwerke nach bestimmten Dateien 
Autor: Stümper
Datum: 17.05.20 15:43

Hier mein Code und die Fehlermeldung.

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles _
  Button3.Click
        Dim oDir As IO.DirectoryInfo
        For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
            oDir = New IO.DirectoryInfo(drive.Name)
            Rekursiv(oDir)
        Next
    End Sub
    Private Sub Rekursiv(ByVal oDir As IO.DirectoryInfo)
        Dim oSubDir As IO.DirectoryInfo
        Dim oFile As IO.FileInfo
        For Each oFile In oDir.GetFiles()
            'MsgBox(oDir.Name)
            With oFile
                If Mid(oFile.Name, 1, 1) = "$" Then
                    MsgBox("uli")
                End If
                ListBox8.Items.Add(oDir.Name & "\" & oFile.Name & vbTab)
            End With
        Next
        For Each oSubDir In oDir.GetDirectories()
            Rekursiv(oSubDir)
        Next
    End Sub
:Fehler Meldung
System.UnauthorizedAccessException: "Der Zugriff auf den Pfad" & _
  ""C:\$Recycle.Bin\S-1-5-18" wurde verweigert."
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Durchsuchen aller Laufwerke nach bestimmten Dateien 
Autor: Manfred X
Datum: 17.05.20 16:21

Für solche Zwecke kann man z.B. die Windows-API verwenden:
(Windows.Forms-Formular)

Imports System
Imports System.IO
Imports System.Runtime
Imports System.Runtime.InteropServices
 
Public Class frmEnumerateFiles
 
    'Code übernommen und leicht modifiziert von .... 
    'https://www.vbarchiv.net/forum/read.php?f=10&t=59926&i=59957
 
    Private Declare Auto Function FindFirstFile Lib "kernel32.dll" (ByVal _
          lpFileName As String, ByRef lpFindData As WIN32_FIND_DATA) As IntPtr
 
    Private Declare Auto Function FindNextFile Lib "kernel32.dll" (ByVal _
        hFindFile As IntPtr, ByRef lpFindData As WIN32_FIND_DATA) As IntPtr
 
    Private Declare Function FindClose Lib "kernel32.dll" (ByVal hFindFile As _
        IntPtr) As Boolean
 
 
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)>
    Private Structure WIN32_FIND_DATA
        Public sfileAttributes As Int32
        Public creationTime_lowDateTime As Int32
        Public creationTime_highDateTime As Int32
        Public lastAccessTime_lowDateTime As Int32
        Public lastAccessTime_highDateTime As Int32
        Public lastWriteTime_lowDateTime As Int32
        Public lastWriteTime_highDateTime As Int32
        Public nFileSizeHigh As Int32
        Public nFileSizeLow As Int32
        Public dwReserved0 As Int32
        Public dwReserved1 As Int32
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)>
        Public fileName As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=14)>
        Public alternateFileName As String
    End Structure
 
 
    Private Const MAX_PATH As Integer = 260
    Private Const INVALID_HANDLE_VALUE As Integer = -1
    Private Const FILE_ATTRIBUTE_DIRECTORY As Integer = &H10
 
 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
          System.EventArgs) Handles MyBase.Load
 
        Dim files As New List(Of String)
        FindAllFiles("C:\users", "*.pdf", files)
        Stop
    End Sub
 
 
 
    Private Sub FindAllFiles (ByVal folder As String, ByVal pattern As String, 
                              ByRef files As List(Of String))
 
        Dim w32data As New WIN32_FIND_DATA
        Dim Handle As System.IntPtr = FindFirstFile(Path.Combine(folder, _
          "*.*"), w32data)
        If Handle <> CType(INVALID_HANDLE_VALUE, System.IntPtr) Then
            Dim Search As Boolean = True
            Do
                'Handelt es sich um ein Verzeichnis? 
                If (w32data.sfileAttributes And FILE_ATTRIBUTE_DIRECTORY) =
                      FILE_ATTRIBUTE_DIRECTORY Then
                    'Verzeichnisnamen ermitteln und für den späteren rekursiven 
                    ' Aufruf speichern 
                    If w32data.fileName <> "." And w32data.fileName <> ".." Then
                        FindAllFiles(Path.Combine(folder, w32data.fileName),
                              pattern, files)
                    End If
                Else
                    'es ist eine datei
                    If w32data.fileName Like pattern Then
                        files.Add(Path.Combine(folder, w32data.fileName))
                    End If
                End If
            Loop Until FindNextFile(Handle, w32data) = CType(False, _
              System.IntPtr)
 
            'handle schliessen
            FindClose(Handle)
        End If
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Durchsuchen aller Laufwerke nach bestimmten Dateien 
Autor: Stümper
Datum: 17.05.20 16:32

Besten Dank für Ihre Antworten.
Da ich im Augenblick keine Zeit habe den letzten Rat zu überdenken,
werde ich mich zu gegebener Zeit melden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2020 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