C#將文件復(fù)制到指定文件夾并整理
下面是在C#中將文件復(fù)制(剪切是先復(fù)制再刪除)到指定的路徑,并按日期歸檔的一個簡單實例。值得注意的2點是:
1)文件的路徑是關(guān)鍵,程序中使用雙斜杠\\
2)文件和文件夾的區(qū)別
private void DoWork() { String dir="D:\\ABC" //創(chuàng)建備份文件夾,按時間命名 String bakDir = dir + "\\bak\\" + DateTime.Now.ToString("yyyy-MM-dd"); if (Directory.Exists(bakDir) == false){ Directory.CreateDirectory(bakDir); } string[] files = Directory.GetFiles(dir); if (files.Length != 0) { foreach (string file in files) { FileInfo fileinfo = new FileInfo(file); try{ string fileName = file.Replace(dir, ""); //備份文件 File.Copy(file,Path.Combine(bakDir,fileName)); File.Delete(file); } } }
附上其他網(wǎng)友的實現(xiàn)方法:
private void CopyDir(string srcPath, string aimPath) { try { // 檢查目標(biāo)目錄是否以目錄分割字符結(jié)束如果不是則添加 if (aimPath[aimPath.Length - 1] != System.IO.Path.DirectorySeparatorChar) { aimPath += System.IO.Path.DirectorySeparatorChar; } // 判斷目標(biāo)目錄是否存在如果不存在則新建 if (!System.IO.Directory.Exists(aimPath)) { System.IO.Directory.CreateDirectory(aimPath); } // 得到源目錄的文件列表,該里面是包含文件以及目錄路徑的一個數(shù)組 // 如果你指向copy目標(biāo)文件下面的文件而不包含目錄請使用下面的方法 // string[] fileList = Directory.GetFiles(srcPath); string[] fileList = System.IO.Directory.GetFileSystemEntries(srcPath); // 遍歷所有的文件和目錄 foreach (string file in fileList) { // 先當(dāng)作目錄處理如果存在這個目錄就遞歸Copy該目錄下面的文件 if(System.IO.Directory.Exists(file)) { CopyDir(file, aimPath + System.IO.Path.GetFileName(file)); } // 否則直接Copy文件 else { System.IO.File.Copy(file, aimPath + System.IO.Path.GetFileName(file),true); } } } catch(Exception e) { throw; } } }
完全可以不用遞歸實現(xiàn),用廣度優(yōu)先算法可以節(jié)省棧空間
using System; using System.IO; using System.Collections; using System.Collections.Generic; string sourcepath=@"C:\sourcedir"; Queue<FileSystemInfo> copyfolders = new Queue<FileSystemInfo>(new DirectoryInfo(sourcepath).GetFileSystemInfos()); string copytopath = @"C:\targetdir"; copytopath = (copytopath.LastIndexOf(Path.DirectorySeparatorChar) == copytopath.Length - 1) ? copytopath : (copytopath+Path.DirectorySeparatorChar) + Path.GetFileName(sourcepath); Directory.CreateDirectory(copytopath); while (copyfolders.Count>0) { FileSystemInfo atom = opyfolders.Dequeue(); FileInfo file = atom as FileInfo; if (file == null) { DirectoryInfo directory = atom as DirectoryInfo; Directory.CreateDirectory(directory.FullName.Replace(sourcepath,copytopath)); foreach (FileSystemInfo fi in directory.GetFileSystemInfos()) copyfolders.Enqueue(fi); } else file.CopyTo(file.FullName.Replace(sourcepath,copytopath)); }
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
- c# 文件操作(移動,復(fù)制,重命名)
- C#中使用FilleStream實現(xiàn)視頻文件的復(fù)制功能
- C# FileStream實現(xiàn)大文件復(fù)制
- C# FileStream復(fù)制大文件
- C#使用FileStream復(fù)制一個任意文件
- C#實現(xiàn)文件夾的復(fù)制和刪除
- C# 復(fù)制與刪除文件的實現(xiàn)方法
- C#程序中創(chuàng)建、復(fù)制、移動、刪除文件或文件夾的示例
- C#進(jìn)行文件讀寫、創(chuàng)建、復(fù)制、移動、刪除的方法
- C# 對文件與文件夾的操作包括刪除、移動與復(fù)制
- C#實現(xiàn)文件Move和Copy操作
相關(guān)文章
C#靜態(tài)代碼織入AOP組件之Rougamo的使用詳解
Rougamo是一個靜態(tài)代碼織入的AOP組件,同為AOP組件較為常用的有Castle、Autofac、AspectCore等,下面就跟隨小編一起來學(xué)習(xí)一下它的具體使用吧2024-01-01C#使用ADO.Net部件來訪問Access數(shù)據(jù)庫的方法
數(shù)據(jù)庫的訪問是所有編程語言中最重要的部分,C#提供了ADO.Net部件用于對數(shù)據(jù)庫進(jìn)行訪問。本文從最簡單易用的微軟Access數(shù)據(jù)庫入手討論在C#中對數(shù)據(jù)庫的訪問。2015-09-09Visual Studio中根據(jù)系統(tǒng)區(qū)分引用64位、32位DLL動態(tài)庫文件的配置方法
這篇文章主要介紹了Visual Studio中根據(jù)系統(tǒng)區(qū)分引用64位、32位DLL動態(tài)庫文件的配置方法,本文在VS2008中測試通過,其它VS版本可以參考下2014-09-09C#實現(xiàn)winform自動關(guān)閉MessageBox對話框的方法
這篇文章主要介紹了C#實現(xiàn)winform自動關(guān)閉MessageBox對話框的方法,實例分析了C#中MessageBox對話框的相關(guān)操作技巧,需要的朋友可以參考下2015-04-04C# 使用CancellationTokenSource取消多線程
有時間我們在使用多線程的時候,需要取消線程的執(zhí)行,可以使用CancellationTokenSource來取消對Task開辟多線程的取消,感興趣的可以了解一下2021-08-08一文詳解C#中數(shù)組、鏈表、Hash的優(yōu)缺點
在 C# 中,數(shù)組(Array)、鏈表(LinkedList)和哈希表(Hash)是常用的數(shù)據(jù)結(jié)構(gòu),每種都有其自身的優(yōu)缺點,本文將通過代碼示例給大家詳細(xì)的介紹一下,需要的朋友可以參考下2024-02-02