c#之IO基礎《複製文件夾》

/*
 * 由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);
				}
			}
		}
	}
}








發佈了56 篇原創文章 · 獲贊 16 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章