最正宗的文件重命名
相信通过File来给文件重命名,大家并不陌生,但是今天我想讲解一种简单,易懂,并且比较罕见的重命名方式:
那就是利用visual studio自带的程序集框架进行重命名操作:
1.先添加引用:Microsoft.VisualBasic,再加上using Microsoft.VisualBasic.Devices;
2.就下面两行
Computer MyComputer = new Computer();
MyComputer.FileSystem.RenameFile(FileName, newFileName);
其中FileName是你所要重命名的文件的全路径,newFileName仅仅是目标文件名;
具体代码如下:
using Microsoft.VisualBasic.Devices; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace frmCopyFile { public partial class frmSecond : Form { public frmSecond() { InitializeComponent(); } private void btnCopy_Click(object sender, EventArgs e) { string formatTime = DateTime.Now.ToString("yyyy-MM-dd"); //拼接重命名文件的字符串 string rename_condition = formatTime.Replace("-", ""); //动态拼接文件夹的字符串 string dir_condition = GetNewPath(formatTime); //获取78服务器路径 string path = @"\\10.0.0.78\d$\备份\sql2000\" + dir_condition; DirectoryInfo folder = new DirectoryInfo(path); foreach (FileInfo file in folder.GetFiles("*.*")) { string extension = file.Extension.ToLower(); if (extension == ".abf" || extension == ".cab") { string name = GetFileNameExceptExtension(file.Name, rename_condition); if ("" != name) { if (!File.Exists(path + @"\" + name + file.Extension)) { Computer MyComputer = new Computer(); //其中第一个参数是要重命名的文件的全路径,第二个参数仅仅是目标文件名; MyComputer.FileSystem.RenameFile(file.FullName, name + file.Extension); } } } } MessageBox.Show("已完成"); } private string GetFileNameExceptExtension(string name,string condition) { string filename = ""; int pos = name.IndexOf('.'); if(pos>-1) { filename = name.Substring(0, pos); } //正常情况下,例如energy.abf,加上后缀是enery20151201.abf,但是如果这时有新处理了一些库,比如多了个hanye.abf库,需要对当前文件夹重新处理 //那么enery20151201.abf将又会被添加一次日期后缀,所以下列操作就是为了避免此情况的发生 string isReply = ""; //如果添加了日期后缀的文件,那么长度一定大于8,在此判断是为了避免未重命名的文件的名字太短,而导致的filename.Length - 8 //这句话报异常 if (filename.Length > 8) { isReply = filename.Substring(filename.Length - 8); } if ("" != filename && isReply != condition) { //国际贸易有两个库,分为高级查询(internationaltrade)和其他查询(internationaltrade2),此处主要作用是判断高级查询 //原因:如果不加个分隔符,那么格式化后的国际贸易库是这样的internationaltrade220151130, //if (filename.Contains("2")) //{ // filename = filename + "_" + condition; //} //else //{ filename = filename + condition; //} } return filename; } /// <summary> /// 格式化日期 /// </summary> /// <param name="condition"></param> /// <returns></returns> private string GetNewPath(string condition) { string dir_condition = ""; string[] strArray = condition.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); dir_condition = strArray[0] + strArray[1]; return dir_condition; } } }