Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Build Your Own ASP.NET 2.0 Web Site Using CSharp And VB (2006) [eng]-1.pdf
Скачиваний:
142
Добавлен:
16.08.2013
Размер:
15.69 Mб
Скачать

Accessing Directories and Directory Information

Figure 14.7. Reading a file using StreamReader

Accessing Directories and Directory

Information

Now that you have some understanding of writing to and reading from text files, let’s look at accessing the directories in which those files are located. The classes that are available in the System.IO namespace for working with directories and directory information are as follows:

Directory

contains shared/static methods for creating, moving, and retrieving the contents of directories

DirectoryInfo

contains instance methods for creating, moving, and retrieving the contents of directories

Just like the File class, the Directory class contains shared/static methods, which we can call without instantiating the class. The DirectoryInfo class, on the other hand, requires instantiation, as it contains only instance methods. The Directory class contains the following useful methods:

GetDirectories

returns a string array of directory names

GetFiles

returns a string array of filenames from a specific drive or directory

GetFileSystemEntries

returns a string array of directory and filenames

583

Chapter 14: Working with Files and Email

Let’s build an example page with a DropDownList control to display the directories and files within the server’s C: drive. In the same Learning folder, create a web form named Directories.aspx, without a code-behind file, then add to it the code shown here in bold:

Visual Basic File: Directories.aspx (excerpt)

<%@ Import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server"> </script>

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">

<title>Directory Info</title>

</head>

<body>

<form id="form1" runat="server">

What do you want to view:<br /> <asp:DropDownList ID="dirDropDown" runat="server"

OnSelectedIndexChanged="ViewDriveInfo"

AutoPostBack="true"> <asp:ListItem Text="Directories" /> <asp:ListItem Text="Files" />

<asp:ListItem Text="Directories/Files" /> </asp:DropDownList>

<asp:GridView ID="grid" runat="server" />

</form>

</body>

</html>

As you can see, our interface consists of a DropDownList control containing the three choices from which the user can select (Directories, Files, or Directories/Files). When a user selects an item from the DropDownList control, the SelectedIndexChanged event is raised, and ViewDriveInfo is called.

Now, let’s write the ViewDriveInfo method, which will write the specified information to the GridView control:

Visual Basic File: Directories.aspx (excerpt)

<script runat="server">

Sub ViewDriveInfo(ByVal s As Object, ByVal e As EventArgs) Select Case dirDropDown.SelectedItem.Text

Case "Directories"

grid.DataSource = Directory.GetDirectories("C:\") Case "Files"

584

Accessing Directories and Directory Information

grid.DataSource = Directory.GetFiles("C:\") Case "Directories/Files"

grid.DataSource = Directory.GetFileSystemEntries("C:\") End Select

grid.DataBind()

 

End Sub

 

</script>

 

 

 

C#

File: Directories.aspx (excerpt)

 

 

<script runat="server">

 

void ViewDriveInfo(Object s, EventArgs e)

 

{

 

switch (dirDropDown.SelectedItem.Text)

 

{

 

case "Directories":

grid.DataSource = Directory.GetDirectories("C:\\"); break;

case "Files":

grid.DataSource = Directory.GetFiles("C:\\"); break;

case "Directories/Files":

grid.DataSource = Directory.GetFileSystemEntries("C:\\"); break;

}

grid.DataBind();

}

</script>

You might remember from Chapter 3 that we use Select Case (VB) or switch (C#) statements to check for the possibility of multiple values of an object, rather than just one. The Select Case or switch specifies the value that is to be checked (in this case, the Text property of the selected list item):

Visual Basic

File: Directories.aspx (excerpt)

 

 

Select Case dirDropDown.SelectedItem.Text

 

 

 

C#

File: Directories.aspx (excerpt)

 

 

switch (dirDropDown.SelectedItem.Text)

 

Next, we use Case to specify the action to be performed for each significant value.

The data retrieved by the GetDirectories, GetFiles, or GetFileSystemEntries method of Directory can be fed to the GridView as its DataSource. After specifying the DataSource, we need to call the control’s DataBind method, as if we were reading from a database, to fetch and display the data from the data source.

585

Chapter 14: Working with Files and Email

Save your work and test the results in your browser. Figure 14.8 shows within the GridView the kind of results that display when the user selects an item from the DropDownList.

Figure 14.8. Using the Directory class to view specific files, directories, or both, from a specific drive

More Options

The GetDirectories, GetFiles, and GetFileSystemEntries methods accept more than simple drive or directory names. For instance, if you wanted to view only text files, you could use the following VB code:

Directory.GetFiles("C:\", "*.txt")

In this example, the GetFiles method would retrieve from the root of the C: drive all files that have the .txt extension.

Working with Directory and File Paths

The System.IO namespace also includes a utility class named Path that contains methods for retrieving path information from files and directories. As an example, let’s build a simple application that retrieves the directory and path information

586

Working with Directory and File Paths

for a text file. Create a new web form named PathInfo.aspx in the Learning directory, then add to it the code shown here in bold:

Visual Basic File: PathInfo.aspx

<%@ Page Language="VB" %>

<%@ Import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server"> </script>

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">

<title>Directory and Path Information</title>

</head>

<body>

<form id="form1" runat="server">

<asp:Label ID="resultLabel" runat="server" />

</form>

</body>

</html>

The page contains a simple Label control, which we’ll use to show all the directory and path information. Next, let’s add the code that actually returns the path and directory information:

Visual Basic

File: PathInfo.aspx (excerpt)

<script runat="server">

 

Sub Page_Load(ByVal s

As Object, ByVal e As EventArgs)

Dim strPath As String

strPath = MapPath("myText.txt")

resultLabel.Text &=

"File Path: " & strPath & "<br />"

resultLabel.Text &=

"File name: " & _

Path.GetFileName(strPath) & "<br />"

resultLabel.Text &=

"Directory: " & _

Path.GetDirectoryName(strPath) & "<br />"

resultLabel.Text &=

"Extension: " & _

Path.GetExtension(strPath) & "<br />"

resultLabel.Text &=

"Name without Extension: " & _

Path.GetFileNameWithoutExtension(strPath)

End Sub

 

</script>

 

 

 

C#

File: PathInfo.aspx (excerpt)

 

 

<script runat="server">

 

void Page_Load(Object

s, EventArgs e)

587

Chapter 14: Working with Files and Email

{

string strPath;

strPath = MapPath("myText.txt");

resultLabel.Text += "File Path: " + strPath + "<br />"; resultLabel.Text += "File name: " +

Path.GetFileName(strPath) + "<br />"; resultLabel.Text += "Directory: " +

Path.GetDirectoryName(strPath) + "<br />"; resultLabel.Text += "Extension: " +

Path.GetExtension(strPath) + "<br />"; resultLabel.Text += "Name w/out Extension: " +

Path.GetFileNameWithoutExtension(strPath);

}

</script>

Initially, we create a new string variable and set it equal to the full path of the text file:

Visual Basic

File: PathInfo.aspx (excerpt)

Dim strPath As String

 

strPath = MapPath("myText.txt")

 

Next, we write into the Label control the complete file path, filename with extension, directory, extension, and filename without extension, by using the Path class’s GetFileName, GetDirectoryName, GetExtension, and GetFileNameWithoutExtension methods, respectively.

Save your work and test the results in your browser. Figure 14.9 shows how all the information for the text file is displayed.

Figure 14.9. Retrieving the path, filename, directory, file extension, and filename without extension for the text file

588

Working with Directory and File Paths

However, those aren’t the only methods to which the Path class gives us access. Here’s a list of all of the methods you can use:

ChangeExtension

modifies a file’s extension

Combine

joins two file paths

GetDirectoryName

returns the directory part of a complete file path

GetExtension

returns the file extension from a file path

GetFileName

returns the filename from a file path

GetFileNameWithoutExtension

returns the filename without the file extension from a file path

GetFullPath

expands the supplied file path with a fully qualified file path

GetPathRoot

returns the root of the current path

GetTempFileName

creates a uniquely named file and returns the name of the new file

GetTempPath

returns the path to the server’s temp directory

HasExtension

returns True when a file path contains a file extension

IsPathRooted

returns True when a file path makes reference to a root directory or network share

See the .NET Framework SDK documentation for full details on all of these methods.

589