Πώς μπορώ να πάρω τα ονόματα των drives, φακέλων και αρχείων ενός Η/Υ
·
Τα ονόματα των
λογικών drives σε έναν H/Y μπορώ να τα πάρω με τη μέθοδο GetLogicalDrives
τη κλάσης Environment.
·
Τα ονόματα των
φακέλων (ή υπο-φακέλων) ενός drive ή φακέλου μπορώ να
τα λάβω με τη μέθοδο GetDirectories της κλάσης
Directory.
·
Τα ονόματα των
αρχείων ενός φακέλου μπορώ να τα πάρω με τη μέθοδο GetFiles
της κλάσης Directory.
Η τελευταία μπορεί να συνδυαστεί με wildcard characters (*, ?) για να λάβουμε μία συγκεκριμένη ομάδα
αρχείων (π.χ. *.txt).
Η κλάση Directory διαθέτει κι άλλες μεθόδους για δημιουργία/
μετακίνηση / διαγραφή φακέλων. Στην εικόνα, βλέπουμε ένα παράδειγμα. Όταν
επιλέξουμε ένα drive εμφανίζονται οι φάκελοι του root, ενώ αν επιλέξουμε ένα
φάκελο, εμφανίζονται δεξιά τα αρχεία που περιέχει.
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, η οποία, όμως,
απαιτεί πρώτα τη δημιουργία αντικειμένου και επιστρέφει όχι ονόματα αλλά
αντικείμενα φακέλων/αρχείων.
·
Χρήστος
Μουρατίδης