/*
* 由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基礎《複製文件夾》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.