Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(ebook) Visual Studio .NET Mastering Visual Basic.pdf
Скачиваний:
120
Добавлен:
17.08.2013
Размер:
15.38 Mб
Скачать

590 Chapter 13 WORKING WITH FOLDERS AND FILES

The GetTempPath method returns the system’s temporary folder. All temporary files should be created in this folder, so that the operating system can remove them when it’s running out of space. Your applications should remove all the temporary files they create, but more often than not, programmers leave temporary files around.

HasExtension

This method returns a True/False value indicating whether a path includes a file extension.

VB.NET at Work: The CustomExplorer Project

The CustomExplorer application, which demonstrates the basic properties and methods of the Directory and File objects, duplicates the functionality of Windows Explorer. Its user interface, shown in Figure 13.1, leaves a lot to be desired, but we’ll come back to this example in Chapter 16, where we’ll discuss the TreeView and ListView controls and you’ll see how you can build a more elaborate user interface, but the core of the application will remain pretty much the same. In this chapter, you’ll see how the basic members of the Directory and File objects can be used to manipulate the file system.

Figure 13.1

The Custom-

Explorer project

When you start the application, the names of all the logical drives will be displayed in the top-left ComboBox control, as shown in Figure 13.1. The other controls are initially empty. To view the folders of a drive, just select it in the ComboBox control. When the root folder’s contents appear in the second ListBox control, you can click a folder’s name to view its subfolders and its files. The selected folder’s subfolders will replace the contents of the FoldersList ListBox under the ComboBox control, and the selected folder’s files will replace the contents of the FilesList ListBox.

When you’re not viewing the root folder, the parent folder’s symbol (two periods) will appear at the top of the ListBox control with the folder names. You can click this item to move to the parent folder. The application allows you to use simple clicks to move up and down the hierarchy of your file system. You may wish to make the application a little more elaborate by programming the DoubleClick event too.

The three controls are named DrivesList, FoldersList, and FilesList. When the application is initialized (Listing 13.8), it calls the ShowAllDrives() subroutine, which populates the DrivesList control with the names of the logical drives. The ShowAllDrives() subroutine calls the GetLogicalDrives method of the Directory object and then goes through the array returned by this method and adds each logical drive’s letter to the DrivesList control. The ShowAllDrives() subroutine is shown in Listing 13.9.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

ACCESSING FOLDERS AND FILES 591

Listing 13.8: CustomExplorer’s Form_Load Event Handler

Private Sub Form1_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

ShowAllDrives()

DrivesList.SelectedIndex = 1

Me.Text = Directory.GetCurrentDirectory

End Sub

Listing 13.9: The ShowAllDrives() Subroutine

Sub ShowAllDrives()

Dim drives() As String

drives = Directory.GetLogicalDrives() Dim aDrive As String DrivesList.Items.Clear()

For Each aDrive In drives DrivesList.Items.Add(aDrive)

Next End Sub

When a drive is selected in the DrivesList control, the program calls the ShowFoldersInDrive subroutine (Listing 13.10) to display the folders in the selected drive’s root folder on the FoldersList control. The ShowFoldersInDrive() subroutine accepts a drive as argument and displays the folders in this drive by iterating through the folders in the array returned by the Directory.GetDirectories method.

Listing 13.10: Displaying the Folders of the Selected Drive

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

ShowFoldersInDrive(DrivesList.Text) End Sub

Sub ShowFoldersInDrive(ByVal drive As String) Dim folders() As String

Try

folders = Directory.GetDirectories(drive) Catch exception As Exception

MsgBox(exception.Message) Exit Sub

End Try

Dim fldr As String FoldersList.Items.Clear() Dim DI As DirectoryInfo

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

592 Chapter 13 WORKING WITH FOLDERS AND FILES

For Each fldr In folders

DI = New DirectoryInfo(fldr)

FoldersList.Items.Add(DI.Name)

Next

Directory.SetCurrentDirectory(drive)

Me.Text = Directory.GetCurrentDirectory

End Sub

When you select a new folder in the FoldersList control (all you have to do is click the folder’s name), the program replaces the contents of the FoldersList control with the subfolders of the selected folder. It must also display the parent folder’s name (..), so that you can move up in the directory tree. Listing 13.11 shows the code of the FoldersList control’s SelectedIndexChanged event handler:

Listing 13.11: Displaying the Subfolders of the Selected Folder

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

Dim DI As DirectoryInfo Select Case FoldersList.Text

Case “”

MsgBox(“Please select a folder to expand”) Exit Sub

Case “..” Directory.SetCurrentDirectory(“..”)

Case Else

Directory.SetCurrentDirectory(Directory.GetCurrentDirectory & “\” & _ FoldersList.Text)

Me.Text = Directory.GetCurrentDirectory End Select

Dim folders() As String

Dim selectedFolder As String = FoldersList.Text

folders = Directory.GetDirectories(Directory.GetCurrentDirectory) FoldersList.Items.Clear()

If Directory.GetCurrentDirectory <> _ Directory.GetDirectoryRoot(selectedFolder) Then _

FoldersList.Items.Add(“..”) Dim fldr As String

For Each fldr In folders

DI = New DirectoryInfo(fldr)

FoldersList.Items.Add(DI.Name) Next

ShowFilesInFolder() End Sub

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

ACCESSING FOLDERS AND FILES 593

This event handler always switches to the selected folder by calling the SetCurrentDirectory method of the Directory object. This simplifies the code considerably, because we can move to the parent folder when the user clicks the two periods with the statement Directory.SetCurrentDirectory(“..”). In other words, we don’t have to keep track of the current directory in our code—we’re always in it. The routine that displays the files in the selected folders is also simplified—it goes through the files of the current directory.

If the selected item in the list is the parent folder symbol (..), the program switches to the parent directory. Otherwise, it switches to the selected folder under the current folder. The program then retrieves all the folders under the selected one and stores them in the folders array. A For Each…Next loop is used to iterate through the items of the array and display them on the FoldersList control, replacing its existing contents. Then, it calls the ShowFilesInFolder subroutine, which retrieves the files in the current folder and displays them in the FilesList control (see Listing 13.12).

Listing 13.12: The ShowFilesInFolder() Subroutine

Sub ShowFilesInFolder() Dim file As String Dim FI As FileInfo

FilesList.Items.Clear()

For Each file In Directory.GetFiles(Directory.GetCurrentDirectory) FI = New FileInfo(file)

FilesList.Items.Add(FI.Name) Next

End Sub

The code uses the FileInfo class to retrieve the file’s name. You can also use the FileInfo class’s members to retrieve additional information about the file.

The program also prints information about any file in the Output window. Every time the user selects a file in the FilesList control by clicking its name, the program prints the file’s name, followed by the file’s attributes. It only prints the attributes that are set, and it does so by comparing the Attributes property to each of the members of the FileSystemAttributes enumeration. If the file’s attribute is normal, then the string “NORMAL FILE” is printed under the file’s name. If not, each attribute that is set is displayed with the ATTRIBUTES heading in the Output window. The action of the selection of a new file in the FilesList control is signaled by the SelectedIndexChanged event, whose event handler is shown in Listing 13.13.

Listing 13.13: Retrieving a File’s Properties

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

Dim selectedFile As String = FilesList.Text

Dim FI As New FileInfo(Directory.GetCurrentDirectory & “\” & _ selectedFile)

Console.WriteLine(FI.Name)

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com