| |
VB.NET - FortgeschritteneDurchsuchen 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. | |
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. | |
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." | |
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 | |
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. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere Infos
|
|
|
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
|
|