说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

C#实现文件批量改名工具

HTML文档下载 WORD文档下载 PDF文档下载
我经常需要修改一大批文件的文件名,需要一个一个手工命名非常累,因此我写了这个批量改名程序,本文介绍一下这个程序的实现方法。

 

作者:Steppenwolfe

 

下载源代码

 

我经常需要修改一大批文件的文件名,需要一个一个手工命名非常累,因此我写了这个批量改名程序,情况从此改变。

这个程序的接口是简单灵活的,如果你想使用正则表达式处理,提供LINQ支持,自定义查询等功能,就自个去实现吧,

如今它已经够用了!

 

 

代码实现片段

 

将文件扩展名放入combobox中

 

private Array EnumKeys(RegistryKey root, string subkey){    RegistryKey key = root.OpenSubKey(subkey);    string[] keys = key.GetSubKeyNames();    key.Close();    return keys;}private Array EnumValues(RegistryKey root, string subkey){    RegistryKey key = root.OpenSubKey(subkey);    string[] values = key.GetValueNames();    key.Close();    return values;}private ArrayList GetFileTypes(){    // get supported media types, missing from hkcr    // Applications\wmplayer.exe\SupportedTypes    Array media = EnumValues(Registry.ClassesRoot, MEDIATYPES);    Array list = EnumKeys(Registry.ClassesRoot, "");    ArrayList res = new ArrayList();    foreach (string s in media)    {        if (s.StartsWith("."))        {            res.Add(s);        }    }    foreach (string s in list)    {        if (s.StartsWith("."))        {            if (!res.Contains(s))            {                res.Add(s);            }        }    }    return res;}

下面是如何进行文件名收集,不需递归调用

 

private ArrayList GetFiles(string dir){    ArrayList list = new ArrayList();    string pattern = "*" + cbFileType.Text;    SearchOption option = chkSubfolder.Checked ? 	SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;    if (Directory.Exists(dir))    {        if (chkSubfolder.Checked)        {            list = GetFiles(dir, pattern);        }        else        {            try            {                string[] files = Directory.GetFiles		(dir, pattern, SearchOption.TopDirectoryOnly);                foreach (string s in files)                {                    list.Add(s);                }            }            catch { }        }    }    return list;}private ArrayList GetFiles(string root, string pattern){    Stack<string> dirs = new Stack<string>(20);    ArrayList list = new ArrayList();    string[] subDirs = new string[0];    string[] files = null;    dirs.Push(root);    while (dirs.Count > 0)    {        string currentDir = dirs.Pop();        try        {            subDirs = Directory.GetDirectories(currentDir);        }        catch (UnauthorizedAccessException e) { continue; }        catch (DirectoryNotFoundException e) { continue; }        catch { }        try        {            files = Directory.GetFiles(currentDir, pattern);        }        catch (UnauthorizedAccessException e) { continue; }        catch (DirectoryNotFoundException e) { continue; }        catch { }        foreach (string file in files)        {            list.Add(file);        }        foreach (string str in subDirs)        {            dirs.Push(str);        }    }    return list;}
你可能会疑惑,为什么我不用Directory.GetFiles得到了所有文件,这是因为如果文件被
其它正在处理的应用程序删除或占用,该调用会失败。
特点
撤消更改
添加/删除或替换不同序列中的字符串
改变预览
单词的大小写控制
删除现有的数字序列
有序规则为基础的处理
编号前缀/后缀和格式选项

 

 

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘