コード例 #1
0
        /// <summary>
        /// 処理実行
        /// </summary>
        public override void ExecuteMain(
            Stack <IWork> workStack,
            Result crawlResult,
            CancellationToken cToken,
            IProgress <ProgressState> progress = null
            )
        {
            // 無視設定にマッチしない場合のみ処理
            if (IgnoreSettings.Any(s => s.IsMatch(DirPath, true)))
            {
                Logger.Trace("BackgroundDirectoryCrawl/Ignore directory - {0}", DirPath);
                return;
            }
            else
            {
                // DB内に存在する、対象フォルダ以下の文書データを取得 (スキップ・削除の判定を行うため)
                var dbRecordMap = DBDocumentRecordListUp(new[] { DirPath });

                // DBの不要な文書削除処理をワークスタックに追加(下記処理が終わった後に呼び出される)
                workStack.Push(new DBPurge(_app, IsBackgroundCrawl, dbRecordMap));

                // 検索対象フォルダの更新処理をワークスタックに追加
                workStack.Push(new DirectoryCrawl(_app, IsBackgroundCrawl, DirPath, IgnoreSettings, dbRecordMap));
            }
        }
コード例 #2
0
        /// <summary>
        /// 処理実行
        /// </summary>
        public override void ExecuteMain(
            Stack <IWork> workStack,
            Result crawlResult,
            CancellationToken cToken,
            IProgress <ProgressState> progress = null
            )
        {
            Logger.Debug("ファイル変更時クロール - {0}", FilePath);

            // 展開対象の拡張子一覧を取得
            var extractableExtNames = _app.GetExtractableExtNames();

            // ファイルの拡張子を "txt" 形式で取得
            var ext = Path.GetExtension(FilePath).TrimStart('.').ToLower();

            // 登録対象の拡張子である場合のみ処理
            if (extractableExtNames.Contains(ext))
            {
                // 無視設定に合致しない場合のみ処理
                if (IgnoreSettings.Any(s => s.IsMatch(FilePath, false)))
                {
                    Logger.Trace("BackgroundFileCrawl/Ignore file - {0}", FilePath);
                    return;
                }
                else
                {
                    // DB内に存在する親フォルダ内の文書データを取得 (スキップ・削除の判定を行うため)
                    var dbRecordMap = DBDocumentRecordListUp(new[] { Path.GetDirectoryName(FilePath) });

                    // ファイルの登録処理をワークスタックに追加
                    workStack.Push(new Work.DocumentFileUpdate(_app, IsBackgroundCrawl, FilePath, dbRecordMap));
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// 処理実行
        /// </summary>
        public override void ExecuteMain(
            Stack <IWork> workStack,
            Result crawlResult,
            CancellationToken cToken,
            IProgress <ProgressState> progress = null
            )
        {
            // 展開対象の拡張子一覧を取得
            var extractableExtNames = _app.GetExtractableExtNames();

            // 実行時、指定ディレクトリがすでに削除(もしくは移動)されている場合は、処理をスキップ
            if (!Directory.Exists(DirPath))
            {
                Logger.Debug($"Target directory not found - {DirPath}");
                return;
            }

            Logger.Debug($"フォルダ内クロール - {DirPath}");

            // 直下のサブフォルダを検索し、クロール対象のサブフォルダを取得
            var targetSubDirs = new List <string>();

            ApplySubDirectories(DirPath, (subDirPath) =>
            {
                // 無視設定に合致するフォルダはスキップ
                if (IgnoreSettings.Any(s => s.IsMatch(subDirPath, true)))
                {
                    Logger.Trace("DirectoryCrawl/Ignore directory - {0}", subDirPath);
                    return;
                }

                // サブフォルダを検索対象リストに追加
                targetSubDirs.Add(subDirPath);

                Thread.Sleep(0);                       // 他のスレッドに処理を渡す
                cToken.ThrowIfCancellationRequested(); // 取り消し判定
            });

            // サブフォルダに対するクロール処理をワークスタックに追加
            foreach (var subDirPath in targetSubDirs.Reverse <string>()) // フォルダパスが若い順から処理されるようにするため、逆順にする
            {
                workStack.Push(new DirectoryCrawl(_app, IsBackgroundCrawl, subDirPath, IgnoreSettings, AlreadyDBRecordMap));
            }

            // 直下のファイルを検索し、登録対象の文書ファイルを取得
            var targetFilePaths = new List <string>();

            ApplyFiles(DirPath, (filePath) =>
            {
                // ファイルの拡張子を "txt" 形式で取得
                var ext = Path.GetExtension(filePath).TrimStart('.').ToLower();

                // 登録対象の拡張子である場合のみ処理
                if (extractableExtNames.Contains(ext))
                {
                    // 無視設定に合致しない場合のみ処理
                    if (IgnoreSettings.Any(s => s.IsMatch(filePath, false)))
                    {
                        Logger.Trace("DirectoryCrawl/Ignore file - {0}", filePath);
                        return;
                    }
                    else
                    {
                        targetFilePaths.Add(filePath);
                    }
                }

                Thread.Sleep(0);                       // 他のスレッドに処理を渡す
                cToken.ThrowIfCancellationRequested(); // 取り消し判定
            });

            // ファイルに対するクロール処理をワークスタックに追加
            foreach (var filePath in targetFilePaths.Reverse <string>()) // フォルダパスが若い順から処理されるようにするため、逆順にする
            {
                workStack.Push(new DocumentFileUpdate(_app, IsBackgroundCrawl, filePath, AlreadyDBRecordMap));
            }
        }