批量文件改名
有时候我们从网站上下载的图片或其他文件,一般都喜欢放在一个文件夹下,要一个一个改名字很烦。所以自己编了个小程序。
其中主要用的类有:
Directory
File
思路:
确定文件夹的路径后,获取该路径下的所有文件,改名。这里我们改名是按1、2、3、4、5这样改名,以此类推。
Directory下的一些方法:
Exists():判断路径是否存在。
File
Copy();改名后移动到文件夹路径。
由于Copy方法所改的方法是使用filename做参数,是一个完整的路径,所以我们要对所获取的图片的路径进行拆分,这里就要用到 astIndexOf 和 substring 个字符串下的操作方法。前者是通过制定的字符获取index,而后者是通过一个范围内的index,比如(0,index)来获取该段的字符串。通过这我们就可以获取filename,然后改filename,再使用Move方法就可以给图片更改文件名。
改名的有如下2种思路:
提供一个新的路径,将所改的文件放到改文件夹下,这个方法也是比较简单的。(提倡这种,源文件还存在。)
另外。在原来的文件夹下修改自己的文件名。在这种情况下我们会遇到一个问题,如该文件夹下存在1。Jpg,然后改动文件的时候会报错。提示文件存在。这个时候我们需要处理这种情况,将获得的所有文件的filename数组,进行排序。如下为排序:
A 、 B C 1 2 4
第一次排序,查找 i=1的文件,存在将其调换到 i 所指的数组索引
1 B C A 2 4
继续类似
1 2 C A B 4
…….
1 2 C 4 B A (结果 )
排好序后,在对其进行改名,当遇到i和文件名相同的时候,跳过,不调用Move方法。
当然也可以边排序,边改名,这样比较麻烦,不过最省事的还是另换文件夹。所以推荐第一种思路。
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using System.IO;
10
11 namespace 图片命名
12 {
13 public partial class Form1 : Form
14 {
15 public Form1()
16 {
17 InitializeComponent();
18 }
19
20 public string path;
21 public string savePath;
22
23 private void Form1_Load(object sender, EventArgs e)
24 {
25
26 }
27
28 private void btn_Open_Click(object sender, EventArgs e)
29 {
30 DialogResult dres;
31 dres = fbd_Path.ShowDialog();
32
33 if (dres == DialogResult.OK)
34 {
35 path = fbd_Path.SelectedPath;
36 txt_Path.Text = path;
37 }
38
39 }
40
41 private void btn_Exe_Click(object sender, EventArgs e)
42 {
43
44 if (path != ""&& savePath!="")
45 {
46 Excute(path,savePath);
47 }
48 else
49 {
50 MessageBox.Show("请选择文件夹的路径!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
51 }
52 }
53
54 private void Excute(string xpath,string savePath)
55 {
56 if (Directory.Exists(xpath))
57 {
58 ChangeName(xpath,savePath);
59 }
60 else
61 {
62 MessageBox.Show("错误路径!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
63 }
64
65 }
66
67 private void ChangeName(string xpath,string savePath)
68 {
69 this.listBoxLog.Items.Clear();
70 String[] files = Directory.GetFiles(xpath);
71
72
73 for (int i = 0; i < files.Length;i++ )
74 {
75 int lastpath = files[i].LastIndexOf("\\");
76 int lastdot = files[i].LastIndexOf(".");
77 int length = lastdot - lastpath - 1;
78 string pathpart = files[i].Substring(0, lastpath + 1);
79 string namenoext = files[i].Substring(lastpath + 1, lastdot-lastpath);
80 string ext = files[i].Substring(lastdot);
81
82
83 string fullnewname = savePath+"\\" + (i+1).ToString() + ext;
84
85 File.Copy(files[i],fullnewname);
86 this.listBoxLog.Items.Add(namenoext + "--->" + (i + 1).ToString());
87 this.listBoxLog.SelectedIndex = this.listBoxLog.Items.Count - 1;
88
89
90
91 }
92 }
93
94 private void btn_savePath_Click(object sender, EventArgs e)
95 {
96 DialogResult dres;
97 dres = fbd_Path.ShowDialog();
98
99
100 if (dres == DialogResult.OK)
101 {
102 savePath = fbd_Path.SelectedPath;
103 txt_savePath.Text = savePath;
104 }
105 }
106
107
108
109
110 }
111 }