“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