最近因为项目需要,需要实现一个重命名文件的功能。因为之前一直用powershell,所以第一时间想到的是调用powershell的“ren”命令。
自己写了一个小demo,见下文。
using System;
using System.IO;
using System.Management.Automation;
using System.Runtime.InteropServices;
namespace testBitOFCPU
{
class Program
{
static void Main(string[] args)
{
string target = @"C:\Users\wangqx\Desktop\11.txt";
string fileName = "11";
string fileDirectory = Path.GetDirectoryName(target);
string suffix = Path.GetExtension(target);
string newFileNmae = fileName + "_old" + suffix;/*
using (PowerShell ps = PowerShell.Create())
{
string cmdlet = "ren " + target + " " + fileDirectory +"\\"+ newFileNmae;
ps.AddScript(cmdlet);
IAsyncResult result = ps.BeginInvoke();
ps.EndInvoke(result);
}
}
}
}
完成测试成功,但是总觉得不仅仅如此。而且为替换一个名字还需要专门打开powerhsell环境,很费效率,于是我又上网搜索了一下。有这样一个东西File.Move。根据MSDN描述,又写了一个代码量更加精简的。如下:
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace testBitOFCPU
{
class Program
{
static void Main(string[] args)
{
string target = @"C:\Users\wangqx\Desktop\11.txt";
string fileName = "11";
string fileDirectory = Path.GetDirectoryName(target);
string suffix = Path.GetExtension(target);
string newFileNmae = fileName + "_old" + suffix;
if (File.Exists(target))
{
File.Move(fileDirectory +"\\"+ fileName, fileDirectory +"\\"+ newFileNmae);
}
}
}
}
见MSDN描述,参数可以使用绝对路径也可以传相对路径,但是要注意一点,相对路径会解析为当前工作路径。之前没仔细看备注,直接用相对路径传入,结果没有反应,还以为哪里出问题了,仔细看了后面内容才晓得原委,这里告诫各位,查文档看技术资料,一定要阅读仔细并且全面,不然鬼知道有什么问题。
但是哩,这个Move函数本来是用来移动文件的,只是顺带可以改名字,所以自然也需要注意我们平时拖文件到另一个文件夹容易出现的问题,也就是重名问题,如果目标路径已经有了一个相同名字的文件,直接挪过去会报错
当然,源文件不存在肯定也不行。详细注意事项点击此处查看msdn即可。
对了,忘记介绍这个解析路径的Path类了。以下依次为获取目录、获取扩展名、获取文件名(带有后缀)、获取文件名(不带后缀),获取绝对路径,其他的和本文暂无太大关系,有兴趣点击此处可以查看。
以上,回归主题,文件重命名我所知可以用的方法如下:
1、调用powershell或者cmd环境使用“ren 源文件名称及路径 目标文件名称及路径”给指定路径文件重命名。
2、使用file类的move方法。File.Move(源文件名称及路径,目标文件名称及路径)重命名文件。