天天看點

C#遞歸拷貝檔案删除檔案

拷貝檔案及子檔案,最後一個參數排除,哪個不要删除。(其實就是移動的效果)

//拷貝檔案及子檔案
        public static void CopyDirectory(string src, string dest, string [] skips)
        {
            if (string.IsNullOrEmpty(src)) return;
            CreateDirectoryIfNotExists(dest);

            //拷貝子檔案
            foreach (string file in Directory.GetFiles(src))
            {
                string fileName = Path.GetFileName(file);
                bool bSkip = false;
                if (skips != null)
                {
                    foreach (string skip in skips)
                    {
                        if (fileName.Contains(skip))
                        {
                            bSkip = true;
                            break;
                        }
                    }
                }
                if (bSkip) continue;
                try
                {
                    System.IO.File.Copy(file, dest + "\\" + fileName, true);
                }catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            //遞歸拷貝
            foreach (string dir in Directory.GetDirectories(src))
            {
                string[] parts = dir.Split('\\');
                string lastDirPart = parts[parts.Length - 1];
                CopyDirectory(dir, dest + "\\" + lastDirPart, skips);
            }
        }      

  遞歸删除檔案

public static void DeleteDirectory(string src, string[] skips)
        {
            if (string.IsNullOrEmpty(src)) return;
            if (src.Length <= 10)
            {
                throw new Exception("檔案路徑小,删除請注意");
            }
            
            //删除子檔案
            foreach (string file in Directory.GetFiles(src))
            {
                string fileName = Path.GetFileName(file);
                bool bSkip = false;
                if (skips != null)
                {
                    foreach (string skip in skips)
                    {
                        if (fileName.Contains(skip))
                        {
                            bSkip = true;
                            break;
                        }
                    }
                }
                if (bSkip) continue;
                try
                {
                    File.Delete(file);
                    //File.SetAttributes(file, FileAttributes.Normal);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            //遞歸删除
            foreach (string dir in Directory.GetDirectories(src))
            {
                 DeleteDirectory(dir, skips);
            }

            //删除自己
            if (skips == null)
            {
                Directory.Delete(src);
            }
        }