假设需要写入日志文件,但是不希望日志文件太大影响程序性能,这时需要将原文件重命名
//判断文件是否大于10M
//取得文件大小
if (File.Exists(logpath))
{
FileInfo MyFileInfo = new FileInfo(logpath);
float MyFileSize = (float)MyFileInfo.Length / (1024 * 1024);
if (MyFileSize > 10)
{
//将原文件重命名
RenameLog(logpath);
}
}
//递归重命名
private static void RenameLog(string logpath)
{
string curPath = System.IO.Path.GetDirectoryName(logpath);//"d:\ffff\fwww"
string curName = System.IO.Path.GetFileNameWithoutExtension(logpath);//errorlog.txt
string curExt = System.IO.Path.GetExtension(logpath);//.txt
// 新文件名
int nextNum = 1;
string newStr = "";
try
{
//判断存不存在下一个文件,如果存在就递归
nextNum = GetPathNum(logpath) + 1;
newStr = curPath + "\\" + RemoveNum(curName) + "_" + nextNum + curExt;
if (File.Exists(newStr))
{
RenameLog(newStr);
}
}
catch
{
newStr = curPath + "\\" + curName + "_" + Guid.NewGuid() + curExt;
}
// 改名方法
FileInfo fi = new FileInfo(logpath);
fi.MoveTo(Path.Combine(newStr));
}
private static int GetPathNum(string pathorname)
{
try
{
string curname = System.IO.Path.GetFileNameWithoutExtension(pathorname);
if (!curname.Contains('_'))
{
return 0;
}
return int.Parse(curname.Split('_')[curname.Split('_').Count() - 1]);
}
catch
{
return 0;
}
}
//去除名称后的数字号
private static string RemoveNum(string name)
{
try
{
if (!name.Contains('_'))
{
return name;
}
return name.Substring(0, name.Length - (name.Split('_')[name.Split('_').Count() - 1].Length + 1));
}
catch
{ return name; }
}
效果: