C#中沒有拷貝整個文件夾的方法,最近需要用到,就寫了一個Demo,拿出來跟大家分享一下
主要思想:
1、寫一個拷貝文件夾的函數CopyFolder,傳入源文件夾路徑和目的文件夾路徑
2、判斷目的文件夾路徑是否存在,如果不存在,創建此文件夾
3、獲取源文件夾下的所有文件,拷貝這些文件到目的文件夾
4、獲取源文件夾下的所有文件夾,循環調用CopyFolder(此處利用了遞歸)
代碼:
拷貝文件夾
- using System;using System.IO;namespace FolderService{
- public class FolderService
- {
- static void Main(string[] args)
- {
- if (args.Length != 2)
- {
- Console.WriteLine("請輸入源文件夾地址和目的文件夾地址!");
- return;
- }
- // 判斷源文件夾是否存在
- if (!Directory.Exists(args[0])) {
- Console.WriteLine("源文件夾不存在!");
- return;
- }
- // 拷貝文件夾
- FolderService copy = new FolderService();
- string flag = copy.CopyFolder(args[0], args[1]);
- Console.WriteLine(flag);
- }
- /// <summary>
- /// Copy文件夾
- /// </summary>
- /// <param name="sPath">源文件夾路徑</param>
- /// <param name="dPath">目的文件夾路徑</param>
- /// <returns>完成狀態:success-完成;其他-報錯</returns>
- public string CopyFolder(string sPath, string dPath)
- {
- string flag = "success";
- try
- {
- // 創建目的文件夾
- if (!Directory.Exists(dPath))
- {
- Directory.CreateDirectory
- (dPath);
- }
- // 拷貝文件
- DirectoryInfo sDir = new DirectoryInfo(sPath);
- FileInfo[] fileArray = sDir.GetFiles();
- foreach (FileInfo file in fileArray) {
- file.CopyTo(dPath + "\\" + file.Name, true);
- }
- // 循環子文件夾
- DirectoryInfo dDir = new DirectoryInfo(dPath);
- DirectoryInfo[] subDirArray = sDir.GetDirectorIEs();
- foreach (DirectoryInfo subDir in subDirArray)
- {
- CopyFolder(subDir.FullName, dPath + "//" + subDir.Name);
- }
- }
- catch (Exception ex)
- {
- flag = ex.ToString();
- }
- return flag;
- }
- }}
測試Dmo:
1、把代碼保存為FolderService.cs,把此cs文件放到H:\Program Files\Microsoft Visual Studio 9.0\VC下(具體根據VS安裝路徑不同,地址有所不同)
2、打開Visual Studio Tools中的Visual Studio 2008 Command Prompt,把FolderService.cs拖到此Command Prompt中,在路徑最前方加入csc+空格,回車編譯此程序,如下圖:
3、可以在目錄H:\Program Files\Microsoft Visual Studio 9.0\VC中看到生成了一個FolderService.exe文件,運行此文件(打開cmd.exe,把FolderService.exe拖到cmd.exe中,加上參數,回車),如下圖:
4、這時可以看到,E:\test目錄下的文件全部都拷貝到G:\test目錄下了
【編輯推薦】