C# 漫画打包小工具
scturtle
posted @ 2010年1月29日 21:05
in Other
, 2190 阅读
把批量下下来的漫画有序的打包成iphone/itouch上iComic用的zip
自动从注册表找winrar安装地址(不一定通用)
遍历并查找最后一级目录
打的包放在上一级目录里
已打包过的不在打了,加快速度
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using Microsoft.Win32; using System.Diagnostics; namespace ZipMyComics { class Program { static string rarpath; static bool InitialzeWinRAR() { RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WinRAR"); if (key == null) return false; rarpath = (string)key.GetValue("exe32"); return true; } static bool rar(ref DirectoryInfo dir) { Process proc = new Process(); ProcessStartInfo StartInfo = new ProcessStartInfo(); StartInfo.FileName = rarpath; StartInfo.Arguments = "a " + "\"" + dir.Name + "\"" + ".zip" + " " + "\"" + dir.Name + "\"" + " -r -ep"; StartInfo.WindowStyle = ProcessWindowStyle.Hidden; StartInfo.WorkingDirectory = dir.Parent.FullName; proc.StartInfo = StartInfo; proc.Start(); if (proc != null) { // 监视进程退出 proc.EnableRaisingEvents = true; // 指定退出事件方法 proc.WaitForExit(); return true; } else return false; } static void ListFiles(DirectoryInfo fdir) { //无子目录 为最终子目录 DirectoryInfo[] cdirs = fdir.GetDirectories(); if (cdirs.Length == 0) { //Console.WriteLine(fdir.Name + " 为最终子目录!"); bool hasZIP = false;//是否已打包过 foreach (FileInfo file in fdir.Parent.GetFiles()) if (file.Name.Equals(fdir.Name + ".zip")) { hasZIP = true; break; } if (hasZIP) Console.WriteLine("不必生成 " + fdir.Name + ".zip"); else { if (rar(ref fdir)) Console.WriteLine("生成 " + fdir.Name + ".zip"); else Console.WriteLine("生成 " + fdir.Name + ".zip" + " 时发生错误"); } Console.WriteLine(""); } //对于子目录,进行递归调用 else foreach (DirectoryInfo cdir in cdirs) ListFiles(cdir); } static void Main(string[] args) { if (args.Length != 0) { if (InitialzeWinRAR()) { Console.WriteLine("找到了 WinRAR: " + rarpath); Console.WriteLine("当前目录: " + args[0]); Console.WriteLine(""); ListFiles(new DirectoryInfo(args[0])); Console.WriteLine("结束!"); } else { Console.WriteLine("没有找到 WinRAR 自动退出..."); } } else Console.WriteLine("请把文件夹拖到此程序上面来打开!"); Console.WriteLine("任意键退出..."); Console.Read(); } } }