簡體   English   中英

在 C#.Net 2.0 中使用文件屬性

[英]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);
    }
}

使用遞歸很容易解決這個問題。

諸如“隱藏”之類的文件屬性被指定為枚舉標志,並且最容易使用位操作設置或清除。 您可以通過獲取該路徑的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;
}    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM