最正宗的文件重命名

相信通过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;
        }

    }
}
原文地址:https://www.cnblogs.com/chzbgb/p/6801389.html