Newer
Older
wbackup / wbackup / ListingAllSourceFile.cs
@Kunihiro Narita Kunihiro Narita on 18 Sep 2020 2 KB Stream処理するように再設計
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Concurrent;
using System.Numerics;
using System.IO;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace wbackup
{
    class ListingAllSourceFile : BackupStreamBase
    {
        protected List<string> ignoreFolder = new List<string>();

        public ListingAllSourceFile(BackupStreamBase stream = null):base(stream)
        {

        }


        /// <summary>
        /// バックアップ除外フォルダを追加する
        /// </summary>
        /// <param name="newFolder"></param>
        public void AddIgnoreFolder(string newFolder)
        {
            ignoreFolder.Add(newFolder);
        }

        public override void DoWork(string sourceFileName)
        {
            ListingSourceFiles(sourceFileName);
        }

        /// <summary>
        /// ソースファイルのリストを作成する
        /// </summary>
        /// <param name="rootFolder"></param>
        protected void ListingSourceFiles(string rootFolder)
        {
            foreach (string fileName in Directory.GetFiles(rootFolder))
            {
                if (false == isIgnoreFile(fileName))
                {
                    var fileAttrib = File.GetAttributes(fileName);
                    File.SetAttributes(fileName, fileAttrib | FileAttributes.Archive);
                    nextStream.AddSource(fileName);
                }
            }

            foreach (string directory in Directory.GetDirectories(rootFolder))
            {
                var dirAttrib = File.GetAttributes(directory);
                if (false == dirAttrib.HasFlag(FileAttributes.Hidden))
                {
                    ListingSourceFiles(directory);
                }
            }
        }

        /// <summary>
        /// バックアップ対象外ファイルか判定する
        /// </summary>
        /// <param name="sourceFileName"></param>
        /// <returns></returns>
        protected bool isIgnoreFile(string sourceFileName)
        {
            foreach (var ignoreInfo in ignoreFolder)
            {
                if (Regex.IsMatch(sourceFileName, ignoreInfo))
                {
                    return true;
                }
            }

            return false;
        }
    }
}