[英]Working with File Attributes in 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);
}
}
使用遞歸很容易解決這個問題。
諸如“隱藏”之類的文件屬性被指定為枚舉標志,並且最容易使用位操作設置或清除。 您可以通過獲取該路徑的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, 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.