Dateien unter Vista Suchen

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von tobikubi.

    Dateien unter Vista Suchen

    Wie jeder weiss sperrt Windows Vista automatisch den Zugriff auf spezielle ordner! Wie kann ich jedoch trotzdem unter einem bestimmten pfad mit unterordner, bzw die kompletteFestplatte nach einem bestimmten dateity durchsuchen?
    Das Lesen von Daten und Informationen müsste doch gehen? UAC sollte eigentlich nur das Schreiben und den Zugriff zu unseriösen Sachen verhindern. Einzige Ausnahme sind Dateien und Ordner, die einem anderen Benutzer gehören (Eigene Dateien von anderen).
    hallo tobikubi,

    hast du das mit uac schon probiert ?

    projekt eigenschaften -> anwendung -> uac einstellungen (englisch:view uac settings)

    dort kannst du dann adminrechte vergeben
    einfach die kommentare lesen

    schönen abend noch

    mikeb69
    hallo tobikubi,

    warum soll ich dich beleidigen - es ist doch abend oder ?
    nein - wenn du es auf highest available setzt werden die rechte des aktuellen users auf die höchstmöglichen (für diesen user) gesetzt.

    setz es auf requireAdministrator

    schönen abend noch

    mikeb69
    Vista ist ja ein ordentlicher Kack :P
    "Sie sind dabei ein schlechtes Betriebssystem zu installieren! Fortsetzen oder abbrechen?"

    Entweder Programm als Admin ausführen oder irgendwelche Exceptions abfangen - dann werden die Suchergebnisse aber vermutlich nicht vollständig sein...
    Bevor hier immer nur weiter auf Microsoft respektive Vista herumgehackt wird, sollte der tobikubi doch einfach mal seinen Code posten, mit welchem er die Verzeichnisse durchsucht. Ich habe unter Vista mit eingeschalteter UAC keine Probleme mittels
    IO.Directory.GetFiles alle Dateien aus den Systemverzeichnissen zu lesen.


    @Mad Andy:
    Vista ist ja ein ordentlicher Kack
    "Sie sind dabei ein schlechtes Betriebssystem zu installieren! Fortsetzen oder abbrechen?"

    Muss sowas sein? Das du kein Freund von Microsoftprodukten bist, ist ja offensichtlich, aber solche Kommentare sind einfach billig.
    hallo tobikubi,

    hab mich jetzt - bei meinem guru - mal schlau gemacht !

    so sachen wie 'dokumente und einstellungen' gibt es unter vista nicht mehr.
    wenn ich meinen selbst gebastelten datei-browser mit adminrechten unter vista starte finde ich aber z.b. c:\users

    und darin finde ich alle dateien, die früher unter dokumente und einstellungen\mein user zu finden waren !!!

    also - mit uac findest du schon alle dateien,

    vorraussetzung:
    du musst es richtig machen und
    an den richtigen stellen suchen !!!

    beipsiel:

    der userpfad auf dem vista rechner ist (laut vista datei-explorer)

    c:\benutzer\username (unter xp wäre das c:\dokumente und einstellungen\username)

    mein datei-explorer der nur die festplatte durchkämmt und es anzeigt wie es kommt meldet

    c:\users\username

    empfehlung meines guru !
    die environment-klasse verwenden wenn es um den pfad von system-ordnern geht !!!!!!!

    gute nacht

    mikeb69
    hallo tobikubi,

    wie gesagt - unbedingt die environment klasse verwenden !!!
    diese gibt dir alle systemordner zurück !

    stell dir mal vor deine anwendung wird auf einem englischen pc ausgeführt !!!

    VB.NET-Quellcode

    1. Dim folder As String = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)


    gruss

    mikeb69
    hallo tobikubi,

    da wird man dann ohne etwas code kaum eine aussage treffen können. :rolleyes:
    wie machst du's denn ?

    in meinem datei-browser verwende ich z.b. die findfirstfile findnextfile api's
    aber daran wird es ja kaum liegen !?!

    gruss

    mikeb69

    VB.NET-Quellcode

    1. Dim file As String = System.Enviroment.GetFolderPath(Enviroment.SpecialFolder.MyDocuments)
    2. Dim Pfad() As String = {"*.smd","*.smdi"}
    3. For each b As String In My.Computer.FileSystem.GetFiles(file, FileIO.SearchOption.SearchAllSubDirectories, Pfad)
    4. 'Der code zu verarbeiten von b
    5. Next
    hallo tobikubi,

    hier eine etwas abgewandelte funktion wie sie auch so in meinem dateiexplorer vorkommt.
    statte das ganze mit adminrechten aus und schau mal ob dann die dateien gefunden werden.

    übrigens - die api's sind etwa 7x schneller als die entsprechenden framework funktionen

    hier der code:

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.IO
    3. Imports System.Runtime
    4. Imports System.Runtime.InteropServices
    5. Public Class Form1
    6. Private Declare Auto Function FindFirstFile Lib "kernel32.dll" (ByVal lpFileName As String, ByRef lpFindData As WIN32_FIND_DATA) As IntPtr
    7. Private Declare Auto Function FindNextFile Lib "kernel32.dll" (ByVal hFindFile As IntPtr, ByRef lpFindData As WIN32_FIND_DATA) As IntPtr
    8. Private Declare Function FindClose Lib "kernel32.dll" (ByVal hFindFile As IntPtr) As Boolean
    9. <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
    10. Private Structure WIN32_FIND_DATA
    11. Public sfileAttributes As Int32
    12. Public creationTime_lowDateTime As Int32
    13. Public creationTime_highDateTime As Int32
    14. Public lastAccessTime_lowDateTime As Int32
    15. Public lastAccessTime_highDateTime As Int32
    16. Public lastWriteTime_lowDateTime As Int32
    17. Public lastWriteTime_highDateTime As Int32
    18. Public nFileSizeHigh As Int32
    19. Public nFileSizeLow As Int32
    20. Public dwReserved0 As Int32
    21. Public dwReserved1 As Int32
    22. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)> _
    23. Public fileName As String
    24. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=14)> _
    25. Public alternateFileName As String
    26. End Structure
    27. Private Const MAX_PATH As Integer = 260
    28. Private Const INVALID_HANDLE_VALUE As Integer = -1
    29. Private Const FILE_ATTRIBUTE_DIRECTORY As Integer = &H10
    30. Private files As New List(Of String)
    31. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    32. files = FindFiles(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "*.*")
    33. Stop
    34. End Sub
    35. Public Function FindFiles(ByVal folder As String, ByVal pattern As String) As List(Of String)
    36. Dim ret As New List(Of String)
    37. Dim w32data As New WIN32_FIND_DATA
    38. Dim Handle As Integer = FindFirstFile(Path.Combine(folder, "*.*"), w32data)
    39. If Handle <> INVALID_HANDLE_VALUE Then
    40. Dim Search As Boolean = True
    41. Do
    42. 'Handelt es sich um ein Verzeichnis?
    43. If (w32data.sfileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
    44. 'Verzeichnisnamen ermitteln und für den späteren rekursiven Aufruf speichern
    45. If w32data.fileName <> "." And w32data.fileName <> ".." Then
    46. End If
    47. Else
    48. 'es ist eine datei
    49. ret.Add(w32data.fileName)
    50. End If
    51. Loop Until FindNextFile(Handle, w32data) = False
    52. 'handle schliessen
    53. FindClose(Handle)
    54. End If
    55. Return ret
    56. End Function
    57. End Class

    gruss

    mikeb69