Jun 22, 2007

c# 遍历指定分区/文件夹下的所有文件夹

       同学u盘中毒,导致u盘内的所有文件夹都变成了隐藏文件,并且在u盘根目录下生成以每个文件夹为名、图标为文件夹图标的病毒程序。删除这些病毒程序很容易,但文件夹的隐藏属性通过 右键---〉属性 无法修改。
      中午他手动通过重建目录、移动文件,也弄好了,但是太麻烦了,而且下次要是又中这种毒了,。。。
      晚上,我们三个(我、Yang、TaoA)讨论了下,挺有意思,以后讨论的机会就不多了
      后来,我用C#写了一个小程序,可以完成遍历、设置指定分区中的隐藏文件夹属性为Normal。代码如下:

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace modifyFileAttrib
{
    class Program
    {
        static void Main(string[] args)
        {
            string [] drives = Environment.GetCommandLineArgs(); //从终端获得用户输入的参数
            string str = "";
            for (int i = 1; i < drives.Length; i++) // 程序名是第一个参数,所以i从1开始,而不是从0开始
            {
                str = drives[i];
                SetAllDirNormal(str); // 对用户输入的每个参数,调用SetAllDirNormal函数
            }
            Console.WriteLine("Has Done.");
            return;

        }

        // 设置指定分区/文件夹中的所有隐藏文件夹属性为Normal
        static void SetAllDirNormal(string drive)
        {
            DirectoryInfo dir = new DirectoryInfo(drive);   // 得到磁盘(drive)内的所有文件夹
            DirectoryInfo[] dirList = dir.GetDirectories(); // 获得dir文件夹下的所有子文件夹

            foreach (DirectoryInfo d in dirList)
            {
                FileInfo dirInfo = new FileInfo(d.FullName);  // 为下面设置文件夹熟悉做准备
                SetDirNormal(dirInfo);                        // 设置文件夹属性
                SetAllDirNormal(d.FullName);                  // 递归调用
                //Console.WriteLine("{0}", d.FullName);
            }
        }

        // 若文件夹的属性为Hidden,则设置为Normal
        static void SetDirNormal(FileInfo info)
        {
            if ((info.Attributes & FileAttributes.Hidden) != 0)
            {
                info.Attributes = FileAttributes.Normal;
            }
        }
    }
}

No comments:

Post a Comment

您的评论将使我blog更有动力~