Contents
用Visual Studiode attach to process调试时,无论你有没有设置symbol path,Visual Studio都会把下载的symbol乱放,特别是会放到solution下面,导致文件夹很乱,所以写了一个小工具来删除这些symbol文件夹。同时也能删除resharper和mstest的临时文件。
Everything 是一个非常快的磁盘搜索,正好基于他的SDK 来做这个小工具。
界面如下:
搜索因为是基于Everything的,所以很快。可以增加新的过滤,用正则表达式搜索,这些过滤存放在启动目录下的GarbageCan.xml里面。还能对搜索到的结果计算大小(如果文件很多会比较慢)。
源代码放在Github 上,可执行文件在这里 下载。
1. 使用MVVMLight 这个mvvm的框架,这个框架很容易上手。
2. 使用XmlSerializer存储filter配置文件。
3. 检查everything是否启动。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public static void StartEverything () { Regex regex = new Regex(@"Everything([-.0-9])" ); bool found = false ; foreach (var process in Process.GetProcesses()) { if (regex.Match(process.ProcessName).Success) { found = true ; break ; } } if (!found) { ProcessStartInfo processStartInfo = new ProcessStartInfo(@"ThirdParty\Everything.exe" ); processStartInfo.CreateNoWindow = true ; processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(processStartInfo); m_EverythingLaunch = true ; } }
4. 调用Everything SDK. Everything SDK上面就有C#的示例project,非常简单。
5. 删除文件。需要处理readonly的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 private static void deletePath (string path ) { FileSystemInfo fsi; if (File.Exists(path)) { fsi = new FileInfo(path); } else if (Directory.Exists(path)) { fsi = new DirectoryInfo(path); } else { return ; } deleteFileSystemInfo(fsi); } private static void deleteFileSystemInfo (FileSystemInfo fsi ) { fsi.Attributes = FileAttributes.Normal; var di = fsi as DirectoryInfo; if (di != null ) { foreach (var dirInfo in di.GetFileSystemInfos()) { deleteFileSystemInfo(dirInfo); } } fsi.Delete(); }
6. 计算文件大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public void CalculateSize () { if (Directory.Exists(Path)) { double result = 0 ; foreach (FileInfo file in new DirectoryInfo (Path ).GetFiles ("*" , SearchOption.AllDirectories )) result = result + file.Length; Size = result; } else if (File.Exists(Path)) { Size = new FileInfo(Path).Length; } }