NETCF开发之文件与目录(7)

1.1.1    确定目录是否存在

System.IO命名空间的Directory类包含一个叫做Exists的方法。无论指定的目录是否存在,Exists方法都返回值。该方法的声明如下:

 

Public Shared Function Exists(ByVal path As String) As Boolean

 

 

Exists方法返回一个Boolean值。如果目录存在,返回True,否则返回False。在PocketPC应用程序中可以使用以下这行代码调用Exists方法:

 

MsgBox(System.IO.Directory.Exists("/Program Files/My Directory"))

 

1.1.2    创建目录

Pocket PC应用程序本身可以创建目录。Pocket PC应用程序能够利用目录来组织和存储由应用程序收集或使用的数据。因此Pocket PC应用程序应该提供允许用户组织和存储数据的功能,让用户自己指定文件夹来更好地满足需求。

使用Directory类的CreateDirectory方法创建目录和子目录。该方法的声明为:

 

Public Shared Function CreateDirectory(ByVal path As String) As DirectoryInfo

 

调用CreateDirectory方法时,必须为该方法提供所创建目录的完整路径。调用CreateDirectory方法的示例如下:

 

System.IO.Directory.CreateDirectory("/Program Files/My Directory")

 

在上面这个示例里,将创建目录/Program Files/My Directory。与所有相关的IO操作一样,创建目录时可能产生运行时错误。需要在编程时添加错误处理的代码。错误处理代码如清单11-8所示。

 

清单11-8:错误处理代码

……

' 创建目录

  Try

    System.IO.Directory.CreateDirectory("/Program Files/My Directory")

    Msgbox("The directory was created.")

 

' 例外发生

  Catch ex As Exception

    MsgBox("下列错误发生:" & ex.Message)

End Try

……

1.1.3    移动目录

使用Directory类的Move方法可以把目录和目录下的内容一并移到新的目录。该方法的声明为:

 

Public Shared Sub Move(ByVal sourceDirName As String, ByVal destDirName As String)

 

源目录的路径由参数sourceDirName指定,destDirName标识目的目录的路径。调用Move方法的示例如下:

 

System.IO.Directory.Move("/Program Files/My Directory","/Program Files/New Directory")

 

如果源目录不存在或目的目录已经存在,Move方法将抛出一个例外。清单11-9演示如何从代码处理例外的示例。在调用Move方法之前,调用MoveDirectory方法例行检查源目录和目的目录。Move方法本身包括在Try/Catch结构之内,处理任何其它可能发生的例外。

 

清单11-9:移动目录时增加例外处理

' 声明返回状态结构体

Public Structure ReturnStatus

Dim Success As Boolean

Dim Message As String

End Structure

 

Function MoveDirectory(ByVal strSource As String, ByVal strTarget As String) As ReturnStatus

Dim MyReturn As ReturnStatus

 

If Not (System.IO.Directory.Exists(strSource)) Then

MyReturn.Success = False

MyReturn.Message = "源目录不存在"

Return MyReturn

Exit Function

End If

 

If System.IO.Directory.Exists(strTarget) Then

            MyReturn.Success = False

            MyReturn.Message = "目标目录已存在"

            Return MyReturn

            Exit Function

End If

 

Try

System.IO.Directory.Move(strSource, strTarget)

MyReturn.Success = True

MyReturn.Message = strTarget

Return MyReturn

Catch ex As Exception

MyReturn.Success = False

MyReturn.Message = ex.Message

Return MyReturn

End Try

End Function

1.1.4    删除目录

你可以使用Directory类的Delete方法删除目录。在.NET Compact Framework里,该方法提供两个重载版本。第一个重载版本只删除目录。声明语法如下所示:

 

Overloads Public Shared Sub Delete(ByVal path As String)

 

Delete方法的调用语法如下所示:

 

System.IO.Directory.Delete("/Program Files/My Directory")

 

Delete方法的第二个重载版本删除目录,包括目录下的所有子目录和文件。声明语法是:

 

Overloads Public Shared Sub Delete(ByVal path As String, ByVal recursive As Boolean)

 

设置参数recursiveTrue,则删除目录及其包括的所有子目录和文件。

1.1.5    获取目录下面的子目录

使用Directory 类的GetDirectories方法获得指定目录下面的子目录。该方法返回一个字符串数组,数组里的每个数据项对应一个单独的子目录名。

GetDirectories方法提供两个重载版本。第一个重载版本返回指定目录里包含的所有子目录。该重载版本只接收一个参数,该参数指定当前目录的路径。声明语法如下所示:

 

Overloads Public Shared Function GetDirectories(ByVal path As String) As String()

 

GetDirectories方法的第一个重载版本的调用方式如下所示

 

Dim strDirectories() as String

strDirectories = System.IO.Directory.GetDirectories("/Program Files/My Directory")

 

strDirectories是一个String类型的数组。.NET Compact Framework里,如果/Program Files/My Directory下面不包括任何子目录的话将抛出例外。因此操作目录和文件时应该增加错误处理的代码。

GetDirectories方法的第二个重载版本只返回匹配查询条件的子目录,查询条件由该重载版本的第二个参数指定。声明语法如下所示:

 

Overloads Public Shared Function GetDirectories(ByVal path As String, ByVal searchPattern As String) As String()

 

GetDirectories方法的第二个重载版本的调用方式如下所示

 

Dim strDirectories() as String

strDirectories = System.IO.Directory.GetDirectories("/Program Files/My Directory","tmp*")

 

在上面这个示例里,只返回以“tmp”为前缀的子目录。

前面已经介绍过GetDirectories方法返回一个字符串数组。数组的数据项对应子目录的名称,包括子目录的完整路径。通过循环该数组访问所有子目录,如清单11-10所示。

 

清单11-10:循环子目录数组

……

Dim strDirectories() As String

Dim strDirectory As String

 

' 返回一个已排序的目录列表

strDirectories = System.IO.Directory.GetDirectories("/Program Files/My Directory")

 

' 显示目录

For Each strDirectory In strDirectories

Msgbox(strDirectory)

Next

……

1.1.6    获取目录下面的文件

使用Directory类的GetFiles方法,可以获得指定目录下面的文件。与GetDirectories方法一样,GetFiles方法返回一个字符串数组,数组里的每个数据项对应一个单独的文件名。

GetFiles方法提供两个重载版本。第一个重载版本返回指定目录下面的所有文件,声明语法如下所示:

 

Overloads Public Shared Function GetFiles(ByVal path As String) As String()

 

GetFiles方法的第一个重载版本的调用方式如下所示

 

Dim strFiles() as String

strFiles = System.IO.Directory.GetFiles("/Program Files/My Directory")

 

在上面的示例里,GetFiles方法返回/Program Files/My Directory下面的所有文件。如果在/Program Files/My Directory下面不包括任何文件的话将抛出例外。因此也应该增加相应的错误处理代码。

GetFiles方法的第二个重载版本只返回匹配查询条件的文件,查询条件由该重载版本的第二个参数指定。声明语法如下所示:

 

Overloads Public Shared Function GetFiles(ByVal path As String, ByVal searchPattern As String) As String()

 

GetFiles方法的第二个重载版本的调用方式如下所示

 

Dim strFiles() as String

strFiles = System.IO.Directory.GetFiles("/Program Files/My Directory","*.txt")

 

在上面的示例里,只返回.txt扩展名的文件。

GetFiles方法返回一个字符串数组。数组的数据项对应子目录的名称。通过循环该数组访问所有的文件,如清单11-11所示。

 

清单11-11:循环文件数组

……

Dim strFiles() As String

Dim strFile As String

 

' 返回一个已排序的文件列表

strFiles = System.IO.Directory.GetFiles("/Program Files/My Directory", "*.*")

 

' 显示文件

For Each strFile In strFiles

MsgBox(strFile)

Next

……

1.1.7    其它目录操作

虽然Directory类提供强大的目录操作功能,但仍不能满足Pocket PC应用程序开发的一些特殊的目录操作需要。下面就介绍开发Pocket PC应用程序一些经常遇到的目录操作。

1.1.8    获得应用程序所在目录

在开发Pocket PC应用程序时,通常会希望知道应用程序启动时在哪个目录。获取这个目录能够将配置文件、数据库和其他相关的应用程序文件存储到一个单独的目录里。

System.IO命名空间里的Path类提供一个GetDirectoryName方法,这个方法用于获取当前Pocket PC应用程序所在目录。清单11-12演示获取当前Pocket PC应用程序所在目录。

 

清单11-12:获取当前Pocket PC应用程序所在目录

……

Dim myAppPath as String

myAppPath = System.IO.Path.GetDirectoryName(Reflection.Assembly. _

GetExecutingAssembly().GetName().CodeBase.ToString())

……

1.1.9    调用Windows CE API

通过前面的介绍,已经知道.NET Compact Framework向开发人员提供了许多管理目录的功能,基本能够满足日常开发的需要。但是面对Pocket PC应用程序开发过程中的一些特殊需求,则需要通过Windows CE API来实现,例如前面介绍的SHGetSpecialFolderPath函数。Windows CE API提供了比System.IO命名空间更丰富的目录操作功能。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值