如何解决在C#.Net 2.0中使用文件属性
| 那么,如何才能递归搜索文件夹并取消隐藏目录中的所有文件和子文件夹?就像检查每个文件和每个文件夹一样...如果它们被隐藏了,请取消隐藏。我整天都在碰运气,没有运气。。。我把所有的文件夹都恢复到正常,但仅此而已。解决方法
foreach (var filePath in Directory.GetFiles(@\"C:\\Temp2\"))
{
Console.Write(\"File \" + filePath);
FileAttributes fileAttribute = File.GetAttributes(filePath);
if ((fileAttribute & FileAttributes.Hidden) > 0)
{
Console.WriteLine(\" is hidden.\");
// unset the hidden flag,but do not change other flags:
File.SetAttributes(filePath,fileAttribute & ~FileAttributes.Hidden);
}
else
{
Console.WriteLine(\" is not hidden.\");
}
}
递归地使用
Directory.GetFiles(@\"C:\\Temp2\",\"*\",SearchOption.AllDirectories)
也要包含目录,请使用GetFileSystemEntries
Directory.GetFileSystemEntries(@\"C:\\Temp2\",SearchOption.AllDirectories)
, 这样的事情怎么样?
foreach (var file in directory.GetFiles())
{
if ((File.GetAttributes(file.FullName) & FileAttributes.Hidden) == FileAttributes.Hidden)
{
File.SetAttributes(file.FullName,FileAttributes.Normal);
}
}
, 使用递归很容易解决。
文件属性(例如\“ hidden \”)被指定为枚举标志,并且使用位操作最容易设置或清除。您可以通过获取该路径的FileInfo或DirectoryInfo来查看文件或目录的属性。
// startDir assumed to be full path
public static void UnhideAll(string startDir)
{
DirectoryInfo dir = new DirectoryInfo(startDir);
Console.WriteLine(\"Working in {0}\",startDir);
// First,clear hidden flag on the current directory (if needed)
if ((dir.Attributes & FileAttributes.Hidden) != 0)
{
Console.WriteLine(\"Clearing hidden flag on dir\");
dir.Attributes &= ~FileAttributes.Hidden;
}
else
Console.WriteLine(\"No need to clear flag since it\'s already non-hidden\");
// Second,recursively go into all sub directories
foreach (var subDir in dir.GetDirectories())
UnhideAll(subDir.FullName);
// Third,fix all hidden files in the current folder
foreach (var file in dir.GetFiles())
{
if ((file.Attributes & FileAttributes.Hidden) != 0)
{
Console.WriteLine(\"Clearing hidden flag on file {0}\",file.FullName);
file.Attributes &= ~FileAttributes.Hidden;
}
else
Console.WriteLine(\"Skipping {0} since it\'s not hidden\",file.FullName);
}
}
现在,您可以通过调用递归取消隐藏目录中的所有隐藏文件
UnhideAll(@\"C:\\SomePath\\That\\Should\\Be\\Unhidden\");
当然,使用此代码时,您将希望删除所有对Console.WriteLine
的调用,但我将它们留在了那里,以方便您查看代码运行时的情况。这是一个更简洁的版本:
// startDir assumed to be full path
public static void UnhideAll(string startDir)
{
DirectoryInfo dir = new DirectoryInfo(startDir);
// First,clear the current directory
dir.Attributes &= ~FileAttributes.Hidden;
// Second,fix all hidden files in this folder
foreach (var file in dir.GetFiles())
file.Attributes &= ~FileAttributes.Hidden;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。