我使用C# .NET 4和VS 2010。
当遍历一些路径时,我运行以下代码:
files = Directory.GetFiles(path, searchPattern);
当路径是“文档和设置”文件夹时,我会遇到异常。如何访问它?不,我不想用try和catch跳过该文件夹。我希望能够以某种方式访问它。
编辑:我有一个后续问题。正如我告诉你的那样,我正在遍历路径。是否有一种方法可以使用Environment.GetFolderPath但根据我当前检查的路径识别正确的特殊文件夹?
我使用C# .NET 4和VS 2010。
当遍历一些路径时,我运行以下代码:
files = Directory.GetFiles(path, searchPattern);
当路径是“文档和设置”文件夹时,我会遇到异常。如何访问它?不,我不想用try和catch跳过该文件夹。我希望能够以某种方式访问它。
编辑:我有一个后续问题。正如我告诉你的那样,我正在遍历路径。是否有一种方法可以使用Environment.GetFolderPath但根据我当前检查的路径识别正确的特殊文件夹?
你必须这样使用
var mydocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
要访问MyDocuments文件夹。
从 Environment.SpecialFolder 开始
系统特殊文件夹是诸如Program Files、Programs、System或Startup的文件夹,其中包含常见信息。特殊文件夹由系统默认设置,或者在安装Windows版本时由用户显式设置。
GetFolderPath方法返回与此枚举相关联的位置。这些文件夹的位置在不同的操作系统上可能具有不同的值,用户可以更改某些位置,并且这些位置是本地化的。
只需使用
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
files = Directory.GetFiles(path, searchPattern);
在我的电脑上,它返回为 C:\Users\Soner\Documents
有没有办法使用 Environment.GetFolderPath 但是以某种方式识别 正在检查的路径的正确特殊文件夹?
由于 SpecialFolder 是枚举类型,您可以在循环中迭代它们的值。以下是它的样子;
public enum SpecialFolder
{
AdminTools = 0x30,
ApplicationData = 0x1a,
CDBurning = 0x3b,
CommonAdminTools = 0x2f,
CommonApplicationData = 0x23,
CommonDesktopDirectory = 0x19,
CommonDocuments = 0x2e,
CommonMusic = 0x35,
CommonOemLinks = 0x3a,
CommonPictures = 0x36,
CommonProgramFiles = 0x2b,
CommonProgramFilesX86 = 0x2c,
CommonPrograms = 0x17,
CommonStartMenu = 0x16,
CommonStartup = 0x18,
CommonTemplates = 0x2d,
CommonVideos = 0x37,
Cookies = 0x21,
Desktop = 0,
DesktopDirectory = 0x10,
Favorites = 6,
Fonts = 20,
History = 0x22,
InternetCache = 0x20,
LocalApplicationData = 0x1c,
LocalizedResources = 0x39,
MyComputer = 0x11,
MyDocuments = 5,
MyMusic = 13,
MyPictures = 0x27,
MyVideos = 14,
NetworkShortcuts = 0x13,
Personal = 5,
PrinterShortcuts = 0x1b,
ProgramFiles = 0x26,
ProgramFilesX86 = 0x2a,
Programs = 2,
Recent = 8,
Resources = 0x38,
SendTo = 9,
StartMenu = 11,
Startup = 7,
System = 0x25,
SystemX86 = 0x29,
Templates = 0x15,
UserProfile = 40,
Windows = 0x24
}
您可以设置程序只能以管理员身份运行。
在Visual Studio中:
右键单击项目 -> 属性 -> 安全性 -> 启用ClickOnce安全性
点击后,将在项目属性文件夹下创建一个名为app.manifest的文件,创建完成后,您可以取消选中“启用ClickOnce安全性设置”选项
打开该文件并更改此行:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
目标:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
这将使程序需要管理员权限,并确保您可以访问该文件夹。
Environment.GetFolderPath(...)进行比较,如果匹配,则可以继续执行,否则在循环结构中调用Continue。 - Saravanan