我的目标是检查DirectoryInfo.FullName是否是特殊文件夹之一。
以下是我正在为此做的事情(如果每个特殊文件夹相同,请检查directoryInfo.FullName):
DirectoryInfo directoryInfo = new DirectoryInfo("Directory path");
if (directoryInfo.FullName == Environment.GetFolderPath(Environment.SpecialFolder.Windows) ||
directoryInfo.FullName == Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles ||)
...
...
)
{
// directoryInfo is the special folder
}
但是有许多特殊文件夹(Cookies,ApplicationData,InternetCache等)。有没有办法更有效地完成这项任务?
感谢。
答案 0 :(得分:4)
请尝试以下代码:
bool result = false;
DirectoryInfo directoryInfo = new DirectoryInfo("Directory path");
foreach (Environment.SpecialFolder suit in Enum.GetValues(typeof(Environment.SpecialFolder)))
{
if (directoryInfo.FullName == Environment.GetFolderPath(suit))
{
result = true;
break;
}
}
if (result)
{
// Do what ever you want
}
希望这有帮助。
答案 1 :(得分:1)
使用反射来获取该枚举中的所有值,例如此处http://geekswithblogs.net/shahed/archive/2006/12/06/100427.aspx,并检查您获得的生成路径的集合。
答案 2 :(得分:1)
我担心给出的答案似乎是唯一的方法,我讨厌特殊文件夹,因为这应该是一个非常简单的功能 -
void CollectFiles(string strDir, string pattern) {
DirectoryInfo di = new DirectoryInfo(strDir);
foreach(FileInfo fi in di.GetFiles(pattern) {
//store file data
}
foreach(DirectoryInfo diInfo in di.GetDirectories()) {
CollectFiles(diInfo);
}
}
变得丑陋,因为你必须包括
Check If This Is A Special Folder And Deal With It And Its Child Folders Differently ();
足够公平微软,有一个文件夹,可以存在于任何地方,远程PC,服务器等。但真正的问题是UNIX / Linux方式,使用链接到文件夹,如果目标物理文件夹必须移动,改变链接。然后你可以在一个漂亮的整洁功能中对它们进行迭代,将它们视为普通文件夹。