“IO”之大文件拷贝与文件重名处理

来源:互联网 发布:电脑卸载不了软件 编辑:程序博客网 时间:2024/06/05 20:34
#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

原创粉丝点击