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;
}
}
}