首页 > 学院 > 开发设计 > 正文

清理0字节文件和文件夹

2019-11-17 02:49:56
字体:
来源:转载
供稿:网友

清理0字节文件和文件夹

  最近突然感觉到个人的开发机各种慢,也是啊,从我上大学时起至今,这台老古董跟了我七年多了,还好每年我会亲手给它做一两次的清理和养护,所以它现在依然可以玩命的为我工作。如果我没记错,距离我上一次做系统有两年多了,查看了一下磁盘的情况,window 2003系统 ,系统盘占了45G(满50G,这个里面还包括4G的虚拟内存),其他硬盘上也堆积了各种文件夹和文件,o(︶︿︶)o 唉,删了吧,不舍得,要么是自己做的,要么是辛苦弄来的;不删吧,那就是一堆杂乱无章的垃圾。要怎么办?

  给自己先立下这么个规矩

1.文件夹深度不能超过5

2.不保留0字节文件和文件夹

3.执行磁盘碎片整理(文件压缩也是把散碎文重组的一个好方式,然后再解压缩,不懂的就当我是在胡咧咧吧)

究竟这几步应该如何快速做到呢?


1.文件夹深度不能超过5

cmd 命令有一个 tree , 侬晓得伐?

C:/Users/Administrator>tree "D:/Moontest/Moontest/删除0大小文件和空文件夹" /f文件夹 PATH 列表卷序列号为 A043-7C6DD:/MOONTEST/MOONTEST/删除0大小文件和空文件夹│  PRogram.cs│  删除0大小文件和空文件夹.csproj│├─bin│  ├─Debug│  │      删除0大小文件和空文件夹.exe│  │      删除0大小文件和空文件夹.pdb│  │      删除0大小文件和空文件夹.vshost.exe│  │      删除0大小文件和空文件夹.vshost.exe.manifest│  ││  └─Release├─Controls│      MyButton.cs│├─obj│  └─x86│      └─Debug│          │  1111.csproj.FileListAbsolute.txt│          │  2048.csproj.FileListAbsolute.txt│          │  DesignTimeResolveAssemblyReferences.cache│          │  DesignTimeResolveAssemblyReferencesInput.cache│          │  GenerateResource.read.1.tlog│          │  GenerateResource.write.1.tlog│          │  ResolveAssemblyReference.cache│          │  删除0大小文件和空文件夹.csproj.FileListAbsolute.txt│          │  删除0大小文件和空文件夹.exe│          │  删除0大小文件和空文件夹.Properties.Resources.resources│          ││          └─TempPE│                  Properties.Resources.Designer.cs.dll│└─Properties        AssemblyInfo.cs        Resources.Designer.cs        Resources.resx        Settings.Designer.cs        Settings.settingsC:/Users/Administrator>

这个层次分明了,如果实在太多,可以输入在命令后加上>> d:/result.txt 即是

tree "D:/Moontest/Moontest/删除0大小文件和空文件夹" /f>> d:/result.txt

这种方式把结果导出到一个文件中查看。如果深度太大的,可以手动处理下,这个尽量不要写代码自动化处理,毕竟你不能把你的思维写到计算机里面,文件或删或合并或移位,还是人工的好点,当然我说的是对自己有价值有感情的东西,毕竟某些东西视同己出。


2.不保留0字节文件和文件夹

  这个不管我们采用什么样的系统清理工具,清理工具考虑系统稳定性,一般不会删除不在“花名册”中的0字符文件和文件夹。这样就可能导致我们曾经在安装删除时,系统中保留了大量的卸载后余下的垃圾文件(0字符文件和文件夹),久而久之,看到一堆堆我不认识的东西,心里特别不爽,看到一个,干掉一个;但是这种方式也太慢了。要怎么办呢?自己写个清理方法吧,呵呵。

  我自己提供一下删除0字符文件和文件夹的小代码,比较简单,不解释代码了,分成三段,根据喜好索取,我个人偏好Class2

using System;using System.Collections.Generic;using System.IO;namespace 删除0大小文件和空文件夹{    class Program    {        /*            Class1 和 Class2 的形式是一样的,只是删除方式不一样            Class2 和 Class3 的删除方式是一样的,只是形式不一样            Class1 先检索出所有文件夹,从末端文件夹开始删除0字节文件和文件夹            Class2 和 Class3 检查一个文件夹,先删除0字节文件,然后检索文件夹,重复以上过程,最后从末端文件夹开始删除文件夹         */        static void Main(string[] args)        {            AppDomain.CurrentDomain.UnhandledException += (s, e) => { File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "error.log", DateTime.Now.ToString() + "/t" + e.ExceptionObject.ToString() + Environment.NewLine); };            Class1 c1 = new Class1(args);            Class2 c2 = new Class2(args);            Class3 c3 = new Class3(args);        }    }    public class Class1    {        public Class1(string[] args)        {            Queue<string> queue = new Queue<string>();            Stack<string> stack = new Stack<string>();            if (args.Length > 0)            {                foreach (var item in args)                {                    queue.Enqueue(item);                    stack.Push(item);                }            }            else            {                string rootPath = AppDomain.CurrentDomain.BaseDirectory;                queue.Enqueue(rootPath);                stack.Push(rootPath);            }            while (queue.Count > 0)            {                string curPath = queue.Dequeue();                string[] folders = null;                try                {                    folders = Directory.GetDirectories(curPath);                }                catch { }                if (folders != null && folders.Length > 0)                {                    foreach (var item in folders)                    {                        queue.Enqueue(item);                        stack.Push(item);                    }                }            }            while (stack.Count > 0)            {                string curPath = stack.Pop();                string[] files = null;                try                {                    files = Directory.GetFiles(curPath);                }                catch { }                int filecount = 0;                if (files != null && files.Length > 0)                {                    filecount = files.Length;                    foreach (var item in files)                    {                        FileInfo finfo = new FileInfo(item);                        if (finfo.Length <= 0)                        {                            try                            {                                finfo.Delete();                                filecount--;                                Console.WriteLine("delete file : " + finfo.FullName);                            }                            catch (Exception ex)                            {                                Console.WriteLine(ex);                            }                        }                    }                }                if (filecount == 0)                {                    try                    {                        Directory.Delete(curPath);                        Console.WriteLine("delete folder : " + curPath);                    }                    catch (Exception ex)                    {                        Console.WriteLine(ex);                    }                }            }            Console.WriteLine("清理完毕!!!");            Console.ReadKey();        }    }    public class Class2    {        public Class2(string[] args)        {            Queue<string> queue = new Queue<string>();            Stack<string> stack = new Stack<string>();            if (args.Length > 0)            {                foreach (var item in args)                {                    queue.Enqueue(item);                    stack.Push(item);                }            }            else            {                string rootPath = AppDomain.CurrentDomain.BaseDirectory;                queue.Enqueue(rootPath);                stack.Push(rootPath);            }            while (queue.Count > 0)            {                string curPath = queue.Dequeue();                string[] files = null;                try                {                    files = Directory.GetFiles(curPath);                }                catch { }                if (files != null && files.Length > 0)                {                    foreach (var item in files)                    {                        FileInfo finfo = new FileInfo(item);                        if (finfo.Length <= 0)                        {                            try                            {                                finfo.Delete();                                Console.WriteLine("delete file : " + finfo.FullName);                            }                            catch (Exception ex)                            {                                Console.WriteLine(ex);                            }                        }                    }                }                string[] folders = null;                try                {                    folders = Directory.GetDirectories(curPath);                }                catch { }                if (folders != null && folders.Length > 0)                {                    foreach (var item in folders)                    {                        queue.Enqueue(item);
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表