Visual Basic 2010 Express výpis z PC z oblastí s atributy Hide a System   otázka

VB.NET, I/O operace

Visual Basic 2010 Express výpis z PC z oblastí s atributy Hide a System

Prosím o pomoc - při řešení výpisu názvu souborů z celého HD jak je uvedeno v přiložené ukázce. Problém mám v tom, že algoritmus je funkční pouze na částech HD - kde nejsou oblasti (nebo soubory) s atributy Hide nebo System. Tedy v uvedeném příkladu je OK při nastavení path=D:\ ; při nastavení path=C:\ havaruje s chybou "přístup k cestě C:\Documents and Settings\byl odepřen" (System.UnauthorizedAccessException). Chtěl bych aby tyto oblasti prostě nezahrnoval do výsledku (tedy do pole files() a

pokračoval v činnosti dalších příspěvků do pole files().Tedy v příkazu:

files = di.GetFiles(searchP, SearchOption.AllDirectories)

nedovedu ošetřit vyskytující se chybu - jak nepsat podmínku aby problematické oblasti vynechával.

Děkuji předem , za poskytnutou pomoc -Ludvík Koutný

Imports System.IO
Imports System.ComponentModel
Imports System.Windows.Forms

Public Class Form1
    Public NFLen As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Te1 As String
        Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(1250)
        Dim path As String = "C:\"     'D:\  pro D funguje -nema složky (soubory) s atributy S nebo H
        '                               C:\  pro C nefunguje -ma složky (soubory) s atributy S nebo H
        '                                    jak dosáhnout toho aby tyto položky nezapočítával a nehavaroval? 
        Dim searchP As String = "*"
        Dim files() As FileInfo
        Dim di As DirectoryInfo = New DirectoryInfo(path)
        Try
            files = di.GetFiles(searchP, SearchOption.AllDirectories)       'včetně podsložek
        Catch
            NFLen = Err.Number
            Te1 = Err.Description
        End Try

        NFLen = files.Length - 1      'pocet souboru ve vybrané oblasti a podoblastech  na př.  D:\

    End Sub
End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Samotnou metodu GetFiles nedonutíte přeskočit soubory, do kterých nemá přístup, je bohužel takhle nešikovně napsaná a dá se to objeít jenom tak, že si napíšete vlastní proceduru, která soubory na disku projede.

Jako ukázka může posloužit toto, jsou tam postupy jak s použitím, tak bez použití rekurze:

http://msdn.microsoft.com/en-us/library/...

Zároveň bych Vám doporučil přesunout iterování systémem souborů do separátního vlákna, v závislosti na velikosti disku a počtu položek to může trvat i velmi velmi dlouho a blokovalo by to hlavní vláknou uživatelského rozhraní.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pane Clarai ,díky za radu a nasměrování na vhodný odkaz. Ještě mě napadá jesti by se nedalo využít v rámci Process.Start() volání dir kde je možno volit atributy výpisu -H -S a výstup pak využít v prostředí VB.

dík -Ludvík Koutný

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejsem si jistý, jak to myslíte, zkuste prosím načrtnout kus kódu, který máte na mysli a blíže popsat, co od něj očekáváte. Děkuji.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pro hledání v nepřístupném disku se nabízí v opakovacím cyklu nebo rekurzně procházet složky s "For Each directory As DirectoryInfo In di.GetDirectories", v přístupné složce vykonat co potřebujete, nepřístupnost ošetřit v "Catch ex As UnauthorizedAccessException"...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback