2011-05-30 23 views
3

那么,如何递归搜索文件夹并取消隐藏目录中的所有文件和子文件夹?就像它检查每个文件和每个文件夹...如果他们隐藏..解开他们。我一整个早上都在乱搞,没有运气......我让所有的文件夹恢复正常,但那是关于它的。在C#.Net 2.0中使用文件属性

+0

提供您正在使用的plz代码。 – 2011-05-30 12:20:03

+0

取消/隐藏目录,而不是文件。 – 2011-05-30 16:01:36

回答

0

这样的事情呢?

foreach (var file in directory.GetFiles()) 
{ 
    if ((File.GetAttributes(file.FullName) & FileAttributes.Hidden) == FileAttributes.Hidden) 
    { 
     File.SetAttributes(file.FullName, FileAttributes.Normal); 
    } 
} 
4
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) 
0

这是很容易使用递归解决。

诸如“隐藏”之类的文件属性被指定为枚举标志,并且最容易使用bit operations来设置或清除。您可以通过获取该路径的FileInfoDirectoryInfo来查看文件或目录的属性。

// 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, recursively go into all sub directories 
    foreach (var subDir in dir.GetDirectories()) 
     UnhideAll(subDir.FullName); 

    // Third, fix all hidden files in this folder 
    foreach (var file in dir.GetFiles()) 
     file.Attributes &= ~FileAttributes.Hidden; 
}  
相关问题