Πώς μπορώ να πάρω τα ονόματα των drives, φακέλων και αρχείων ενός Η/Υ

·         Τα ονόματα των λογικών drives σε έναν H/Y μπορώ να τα πάρω με τη μέθοδο GetLogicalDrives τη κλάσης Environment.

·         Τα ονόματα των φακέλων (ή υπο-φακέλων) ενός drive ή φακέλου μπορώ να τα λάβω με τη μέθοδο GetDirectories της κλάσης Directory.

·         Τα ονόματα των αρχείων ενός φακέλου μπορώ να τα πάρω με τη μέθοδο GetFiles της κλάσης Directory. Η τελευταία μπορεί να συνδυαστεί με wildcard characters (*, ?) για να λάβουμε μία συγκεκριμένη ομάδα αρχείων (π.χ. *.txt).

Η κλάση Directory διαθέτει κι άλλες μεθόδους για δημιουργία/ μετακίνηση / διαγραφή φακέλων. Στην εικόνα, βλέπουμε ένα παράδειγμα. Όταν επιλέξουμε ένα drive εμφανίζονται οι φάκελοι του root, ενώ αν επιλέξουμε ένα φάκελο, εμφανίζονται δεξιά τα αρχεία που περιέχει.

http://users.sch.gr/mouratx/VB-NET_Tips/General/Images/DrivesInformation.gif

Imports System.IO

Public Class Form1
Inherits System.Windows.Forms.Form

'πίνακας που περιέχει τα ονόματα των φακέλων του επιλεγμένου Drive.
Dim CurrentFolders$()

'πίνακας που περιέχει τα ονόματα των αρχείων του επιλεγμένου φακέλου.
Dim CurrentFiles$()

'--------------------------------------------------------------------

Private Sub Form1_Load(ByVal sender As System.Object,_
                       ByVal e As System.EventArgs) _
     Handles MyBase.Load

'Πάρε τα λογικά drives του Η/Υ και βάλε τα σε έναν πίνακα string.
Dim strDrives$() = Environment.GetLogicalDrives

'Κατόπιν βάλε τα στο cboDrives.
cboDrives.Items.Clear()
Dim i%
For i = 0 To strDrives.Length - 1

cboDrives.Items.Add(strDrives(i))

Next

'Κανένα επιλεγμένο αρχικά.
cboDrives.SelectedIndex = -1

End Sub

'----------------------------------------------------------------------

'Αν επιλεγεί ένα Drive τότε δείξε τους φακέλους του στο LstFolders.

Private Sub cboDrives_SelectedIndexChanged(ByVal sender As System.Object, _
                                           ByVal e As System.EventArgs) _
           Handles cboDrives.SelectedIndexChanged

Try

If cboDrives.SelectedIndex > -1 Then

'Βάλε σε έναν πίνακα, ταξινομημένους τους φακέλους
‘του επιλεγμένου Drive.
CurrentFolders = _
          Directory.GetDirectories(cboDrives.SelectedItem)

Array.Sort(CurrentFolders)

'Κατόπιν, βάλε τα από τον πίνακα στο Listbox.
‘Μόνο το όνομα (όχι Fullname).
LstFolders.Items.Clear()
Dim i%

For i = 0 To CurrentFolders.GetLength(0) - 1

    LstFolders.Items.Add(Path.GetFileName(CurrentFolders(i)))

Next 

End If

Catch

LstFolders.Items.Clear() : LstFiles.Items.Clear()

End Try

End Sub

'--------------------------------------------------------------------

'Αν επιλεγεί ένας φάκελος δείξε τα αρχεία του στο LstFiles.
Private Sub LstFolders_SelectedIndexChanged(ByVal sender As System.Object, _
                                            ByVal e As System.EventArgs)
      Handles LstFolders.SelectedIndexChanged

Try

If LstFolders.SelectedIndex > -1 Then

'Βάλε σε έναν πίνακα, ταξινομημένους τα αρχεία
‘του επιλεγμένου φακέλου.
Cursor.Current = Cursors.WaitCursor
CurrentFiles = Directory.GetFiles(CurrentFolders(LstFolders.SelectedIndex))
Array.Sort(CurrentFiles)

'Κατόπιν, βάλε τα από τον πίνακα στο Listbox.
‘Μόνο το όνομα (όχι Fullname).
LstFiles.Items.Clear()
Dim i%

For i = 0 To CurrentFiles.GetLength(0) - 1

     LstFiles.Items.Add(Path.GetFileName(CurrentFiles(i)))

Next

End If

Catch
Finally

Cursor.Current = Cursors.Default

End Try

End Sub

End Class


Να σημειωθεί ότι η κλάση Directory περιλαμβάνει στατικές μεθόδους, δηλ. δεν χρειάζεται να δημιουργήσουμε ένα αντικείμενο (στιγμιότυπο κλάσης, με τη μέθοδο Νew) προκειμένου να κάνουμε χρήση των μεθόδων της. Παρόμοιες λειτουργίες, επίσης, επιτελεί η κλάση DirectoryInfo, η οποία, όμως, απαιτεί πρώτα τη δημιουργία αντικειμένου και επιστρέφει όχι ονόματα αλλά αντικείμενα φακέλων/αρχείων.

 

·         Χρήστος Μουρατίδης