public TagRegisterItem(FileContent file)
        {
            FileContent = file;

            if (Regex.IsMatch(file.Name, RegexPattern1)) {
                SearchWord = Regex.Match(file.Name, RegexPattern1).Groups[1].Value;
            } else if (Regex.IsMatch(file.Name, RegexPattern2)) {
                SearchWord = Path.GetFileNameWithoutExtension(
                    Regex.Match(file.Name, RegexPattern2).Groups[1].Value);
            } else {
                SearchWord = Path.GetFileNameWithoutExtension(file.FullPath);
            }
        }
        /// <summary>
        /// コンテンツ読み込み
        /// </summary>
        /// <param name="dir"></param>
        /// <param name="option"></param>
        public void LoadContents(DirectoryNodeViewModel dir, SearchOption option = SearchOption.TopDirectoryOnly) {
            if (dir is RootNodeViewModel) return;

            // キャンセルトークン生成
            Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") + " " + "<CancellationTokenSource> Cancel");
            Logger("<CancellationTokenSource> Cancel");
            foreach (var source in tokenSources.Values) {
                source.Cancel(true);
            }
            if (!tokenSources.ContainsKey(dir.FullPath))
                tokenSources.Add(dir.FullPath, new CancellationTokenSource());

            // コンテンツ取得
            FileContents = new ObservableCollection<FileContent>();
            Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") + " " + "<LoadContents> " + dir.Name);
            Logger("<LoadContents> " + dir.Name);

            var entries = new DirectoryInfo(dir.FullPath).EnumerateFileSystemInfos("*", option)
                .Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden) && !f.Attributes.HasFlag(FileAttributes.System))
                .OrderBy(f => f.FullName)
                .OrderByDescending(f => f.Attributes.HasFlag(FileAttributes.Directory));

            // コンテンツロード
            if (tokenSources.ContainsKey(dir.FullPath)) {
                CancellationToken token = tokenSources[dir.FullPath].Token;

                foreach (var entry in entries) {
                    // 無視ファイルリスト照合
                    if (Properties.Settings.Default.IgnoreFiles.Cast<string>().Any(f => f == entry.Name))
                        continue;

                    FileContent content = new FileContent(entry, token) {
                        VirtualPath = dir.VirtualPath + "/" + entry.Name
                    };
                    content.LoadTag += (tag) => Logger("<LoadTag> " + entry.Name);
                    content.DirectoryOpened += (sender, vpath) => DirectoryOpened(sender, vpath);
                    content.Remove += (sender) => FileContents.Remove(sender as FileContent);
                    FileContents.Add(content);

                    //Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") + " " + "<LoadContens> Add " + entity.Name);
                }
                Logger("<LoadContents> Read Entries");

                //Thumbnails
                Task.Factory.StartNew(() => {
                    foreach (var content in FileContents.Where(a => !a.IsDirectory)) {
                        if (token.IsCancellationRequested) {
                            //Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") + " " + "<Cancellation Thumbnails> Cancellation Requested");
                            break;
                        }
                        Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") + " " + "<LoadThumbnails> " + content.Name);
                        Logger("<LoadThumbnails> " + content.Name);
                        content.LoadThumbnails();
                    }
                }, token).ContinueWith((a) => {
                    tokenSources[dir.FullPath].Dispose();
                    tokenSources.Remove(dir.FullPath);
                });
            }

            Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff") + " " + "<LoadContents> Exit");
            Logger("<LoadContents> Exit " + dir.Name);

            CurrentDirectory = dir;
            Settings.Default.DefaultPath = dir.VirtualPath;
            Settings.Default.Save();
        }