/// <summary> /// クロール実行時の更新 /// </summary> /// <param name="crawlTime">クロール日時</param> /// <param name="selectedTargetDirPaths">検索対象として選択したフォルダパス一覧。指定なし時(設定された検索対象フォルダが1件しかない場合含む)はnull</param> public void SaveOnCrawl(DateTime crawlTime, IEnumerable <string> selectedTargetDirPaths = null) { PlainData.LastCrawlTime = crawlTime; if (selectedTargetDirPaths != null) { // 「選択から除外されたフォルダパスの一覧」を記憶 var settingDirPaths = TargetFolders.Select(f => f.Path); PlainData.LastExcludingDirPaths = settingDirPaths.Except(selectedTargetDirPaths).ToList(); } else { PlainData.LastExcludingDirPaths = null; } Save(); }
static void Main(string[] args) { TargetFolders.Create(); Files.Sort(); }
private Task ProcessList() { return(Task.Factory.StartNew(() => { int i = 0; foreach (string pathSource in SourceFolders) { string folderName = Path.GetFileName(pathSource); try { if (TargetFolders.Contains(txtTarget.Text.TrimEnd('\\') + "\\" + folderName)) { DispatcherOperation <bool> inv = _dispatcher.InvokeAsync(() => { DialogResult dialogResult = MessageBox.Show("El directorio '" + folderName + "' existe en el destino, reemplazar?", "SymLink Tool", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dialogResult == DialogResult.No) { return false; } else { lbOutput.Text = string.Format("Eliminando '{0}' de la ruta '{1}'", folderName, txtTarget.Text); return true; } }); if (inv.Result) { Directory.Delete(txtTarget.Text.TrimEnd('\\') + "\\" + folderName, true); } else { continue; } } _dispatcher.Invoke(() => { lbOutput.Text = string.Format("copiando '{0}' a la ruta '{1}'", folderName, txtTarget.Text); }); DirectoryCopy(pathSource, txtTarget.Text.TrimEnd('\\') + "\\" + folderName, true); _dispatcher.Invoke(() => { lbOutput.Text = string.Format("borrando '{0}' de la ruta '{1}'", folderName, txtSource.Text); }); Directory.Delete(pathSource, true); _dispatcher.Invoke(() => { lbOutput.Text = string.Format("aplicando link simbolico a '{0}' en la ruta '{1}'", folderName, txtTarget.Text); }); string cmd = "/C mklink /d \"" + pathSource + "\" \"" + txtTarget.Text.TrimEnd('\\') + "\\" + folderName.TrimEnd('\\') + "\""; System.Diagnostics.Process.Start("cmd.exe", cmd); _dispatcher.Invoke(() => { lbOutput.Text = string.Format("link simbolico aplicado correctamente a '{0}'", folderName, txtTarget.Text); }); } catch (System.IO.IOException ioex) { _dispatcher.Invoke(() => { lbOutput.Text = ioex.Message; }); } catch (Exception ex) { _dispatcher.Invoke(() => { lbOutput.Text = ex.Message; }); DirectoryCopy(txtTarget.Text.TrimEnd('\\') + "\\" + folderName, pathSource, true); Directory.Delete(txtTarget.Text.TrimEnd('\\') + "\\" + folderName, true); } finally { i++; _dispatcher.Invoke(() => { pbMain.Value = i; }); } } })); }
/// <summary> /// 文書データのキーを受け取り、その値を元に「その文書を含んでいるすべての対象フォルダ情報」を取得する /// </summary> /// <param name="key"></param> public virtual IEnumerable <TargetFolder> FindTargetFoldersFromDocumentKey(string key) { var folders = TargetFolders.Where((f) => key.StartsWith(Util.MakeDocumentDirKeyPrefix(f.Path))); return(folders); }