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

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值