#region 处理重复的文件后补括号加数字,解决文件重复问题
private string ProcessRepeat(string file)
{
//拿文件
file = file.ToLower();
string parent = Directory.GetParent(file).ToString(); //此文件的父目录
string filename = Path.GetFileName(file); //此文件的名称
//准备新的文件名
string newfilename = filename;
//先判断它后面有没有数据如果没有数字的话,在其后面加数字
string pattern = @"(.+)\((\d+)\)" + Path.GetExtension(file);
Match m = Regex.Match(newfilename, pattern);
if (!m.Success)
{
newfilename = Path.GetFileNameWithoutExtension(filename) + "(1)" + Path.GetExtension(filename);
}
m = Regex.Match(newfilename, pattern);
string newfilepath = Path.Combine(parent, newfilename);
while (File.Exists(newfilepath))
{
int number = 1;
int.TryParse(m.Groups[2].Value, out number);
number++;
newfilename = m.Groups[1].Value + "(" + number + ")" + Path.GetExtension(newfilename);
newfilepath = Path.Combine(parent, newfilename);
m = Regex.Match(newfilename, pattern);
}
return newfilepath;
}
#endregion
#region 大文件拷贝-----------源文件-------------目标文件
private void BigFileCopy(string strsource, string strtarget)
{
if (!File.Exists(strsource)) //判断源文件是否存在
{
return;
}
//创建缓冲区
byte[] buffer = new byte[1024*1024*100];
//实例化源文件的文件流只读
using (FileStream fs = new FileStream(strsource, FileMode.Open))
{
//实例化目标文件的文件流,用于向目标文件中写入字节
using (FileStream fswrite = new FileStream(strtarget, FileMode.Create))
{
//一次性读满缓冲区后写入,一直重复直到复制完毕
while (true)
{
int i = fs.Read(buffer, 0, buffer.Length);
if (i > 0)
fswrite.Write(buffer, 0, i);
else
break;
}
}
}
}
#endregion
“IO”之大文件拷贝与文件重名处理
最新推荐文章于 2024-09-12 21:04:39 发布