.NET中的特殊文件夹路径获取

在.NET框架中,从Windows Vista版本开始,微软引入了更多的“特殊文件夹”,例如“文档”和“图片”。然而,.NET库并没有提供一个简单易用的方法来获取这些文件夹的完整路径。Ray Koopa在他的文章中详细讨论了这个问题,并为C#程序员提供了一个名为KnownFolders的类,该类包含GetPath()、GetDefaultPath()和Initialize()等公共方法,用于获取这些文件夹的路径。但是,这些代码仅适用于C#,对于这些生活在Visual Basic世界中的程序员来说,这并不是问题。之所以使用Visual Basic,是因为管理层认为它对于非程序员来说更容易阅读和理解。(有时,认为他们会更高兴使用COBOL。再一想,不要告诉他们关于COBOL.NET或NetCobol!)

在Ray Koopa的文章中,他指出从Windows Vista开始,微软在.NET库中添加了许多“特殊文件夹”,例如“文档”和“图片”。微软并没有提供一个简单易用的解决方案,让程序员能够检索这些文件路径。Ray Koopa提供了一个名为KnownFolders的类,该类包含GetPath()、GetDefaultPath()和Initialize()等公共方法,用于获取这些文件夹的路径。他还提供了一个简短的控制台程序来演示他的代码的使用。

对他的代码进行了改进,将其重写为Visual Basic模块。他的原始注释大部分保留在代码中。还添加了一个名为PathNotFoundException的异常类,该类继承自ApplicationException类,用于提供结构化的错误处理。没有使用控制台程序,而是包含了一个Visual Basic Windows表单来演示代码的使用。为了尽可能广泛的兼容性,使用Visual Studio 2005构建了这个模块。据所知,这个模块可以添加到任何Visual Basic项目中,任何版本的Visual Studio都可以使用。

要使用这个模块,只需将KnownFolders.vb添加到Visual Basic项目中。要获取任何“特殊文件夹”的完整路径名称,只需调用KnownFolders.GetPath,传入要检索的文件夹路径的枚举值。调用将返回所查询文件夹的完整路径,或者抛出PathNotFoundException。下面的代码循环遍历枚举值,并将一组四行添加到文本框中:

For Each myFolder In [Enum].GetValues(GetType(KnownFolders.KnownFolder)) Me.myText.Text &= CInt(myFolder).ToString & vbTab & myFolder.ToString & vbCrLf Me.myText.Text &= vbTab & "Current Path:" & vbTab Try Me.myText.Text &= KnownFolders.GetPath(myFolder) Catch ex As PathNotFoundException Me.myText.Text &= "**** " & ex.Message End Try Me.myText.Text &= vbCrLf Me.myText.Text &= vbTab & "Default Path:" & vbTab Try Me.myText.Text &= KnownFolders.GetDefaultPath(myFolder) Catch ex As Exception Me.myText.Text &= "**** " & ex.Message End Try Me.myText.Text &= vbCrLf & vbCrLf Next

用户只需要在路径后面添加一个"\",然后是一个文件名。就是这么简单!

注意到许多Code Project库的作者并没有定义他们自己的ApplicationExceptions。他们依赖于在代码内部生成MessageBox或触发UnhandledException处理程序。定义自己的异常是很容易的。

Public Class PathNotFoundException Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Throw New PathNotFoundException("Unable to retrieve the known folder path.")
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485