/*
* 由SharpDevelop创建。
* 用户: hubiao
* 日期: 2014/3/2
* 时间: 20:32
*
* <span style="white-space:pre"> </span>本工具为测序程序!!!!!
*/
using System;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Text.RegularExpressions;
namespace demo_6
{
class Program
{
private static UInt64 fileCount = 0;
private static UInt64 dirCount = 0;
public static void Main(string[] args)
{
/**
* 需求:复制文件夹
* 思路:
* 1:获取所有文件目录。
* 如果是文件对象,则开始复制
如果是文件夹,则在目标之间创建文件夹,再递归继续!
2:对文件夹路径,采用先替换,再通过Directory来创建。
如:c:\\abc\aaa
替换成d:\\img\\aaa 再判断这个是否存在,不存在则创建。
本代码有个bug:目前还没把保存路径 做校验判断。希望大家指点....
^(([a-zA-Z]:\\)|(\\{2}\w+)\$?)((([^/\\\?\*])(\\?))*)$可以用这个,但出错...
*/
//string theSourceFile = "D:\\imggg";
//string tager = "e:\\imgMy";
//记录日志
string log = "c:\\copyFileError.txt";
StreamWriter sw = new StreamWriter(log,true);
DateTime date = System.DateTime.Now;
while(true){
sw.WriteLine("\r\n"+date.ToLocalTime());
//开始计算时间
Stopwatch watch = new Stopwatch();
System.Console.Write("\r\n-----------复制小工具(结束系统输入:x)----------\r\n");
System.Console.Write("请输入源文件路径:");
string theSourceFile = Console.ReadLine();
if("X".Equals(theSourceFile.ToUpper())){
break;
}
System.Console.Write("\r\n请输入保存路径:");
string tager = Console.ReadLine();
if("X".Equals(tager.ToUpper())){
break;
}
//处理掉:\\
theSourceFile = theSourceFile.Replace("\\\\","\\");
tager = tager.Replace("\\\\","\\");
watch.Start();
try{
DirectoryInfo theSourceFileInfo = new DirectoryInfo(theSourceFile);
FileSystemInfo[] systemInfo = theSourceFileInfo.GetFileSystemInfos();
traversal(systemInfo,theSourceFile,tager);
}catch(Exception e){
Console.WriteLine("\r\n找不到路径,请重新输入\r\n");
sw.WriteLine(e);
}
watch.Stop();
string timeStr = watch.Elapsed.Seconds.ToString();
int timeNum = int.Parse(timeStr);
Console.WriteLine("\r\n本次复制文件{0}个、文件夹{1}个,耗时{2}秒。",fileCount,dirCount,(timeNum>0)?timeNum+1:timeNum);
sw.WriteLine("本次复制文件{0}个、文件夹{1}个,耗时{2}秒。",fileCount,dirCount,(timeNum>0)?timeNum+1:timeNum);
fileCount = 0;
dirCount = 0;
sw.Flush();
}
sw.Close();
Console.WriteLine("\r\n\r\n系统已结束,请输入任意键关闭窗口.....^_^!");
Console.ReadKey(true);
}
public static bool IsPositiveNumber(String path) {
Regex objNotPositivePattern = new Regex(@"^([a-zA-Z]:\\)?[^\/\:\*\?\""\<\>\|\,]+$");
return objNotPositivePattern.IsMatch(path);
}
private static void traversal(FileSystemInfo[] info,string theSourceFile,string tager){
foreach(FileSystemInfo fsi in info){
FileInfo fileInfo = fsi as FileInfo;
if(fileInfo!=null){
fileCount++;
string fileName = fileInfo.FullName;
fileName = fileName.Replace(theSourceFile,tager);
System.Console.WriteLine("正在复制{0}:",fileName);
File.Copy(fileInfo.FullName,fileName);
}
DirectoryInfo dirInfo = fsi as DirectoryInfo;
if(dirInfo!=null){
string dirName= dirInfo.FullName;
dirName = dirName.Replace(theSourceFile,tager);
//如果不存在,则新创建
if(!File.Exists(dirName)){
dirCount++;
Directory.CreateDirectory(dirName);
}
System.Console.WriteLine("正在创建{0}",dirName);
traversal(dirInfo.GetFileSystemInfos(),theSourceFile,tager);
}
}
}
}
}
c#之IO基础《复制文件夹》
最新推荐文章于 2020-11-24 14:36:43 发布