コンテンツにスキップ

元のファイルを開く

扱うこと: 検索結果の行から元のファイルを開く方法(開き方の 3 種類・Excel の該当セルへの移動)、インデックスを別の PC・場所で使うときの元のフォルダの特定、もらったインデックスの元のフォルダの確認とマクロを持てる形式の開き方、元のファイルが見つからないときの扱い。扱わないこと: 検索結果の表そのもの(検索タブ)。先に読むページ: 検索タブ。

検索結果の行から元のファイルを開く方法(開き方の 3 種類・Excel の該当セルへの移動)と、インデックスを別の PC・場所で使うときに元のファイルを見つける仕組み(元のフォルダの特定(インデックスを別の PC・場所で使う場合)・元のファイルが見つからないとき(元のフォルダを設定する))を定める。

ダブルクリック、Enter、選択行のプレビューの[開く]([▾]から開き方も選べる。選択行のプレビュー)、または右クリックメニューで開く。

項目 仕様
元のファイルのパス 結果のフォルダの先頭(インデックス名)からクロール対象フォルダを引き、<クロール対象フォルダ>\<残りのフォルダ>\<ファイル名> とする(getSourceLocation / resolveSourcePath、元のフォルダの特定(インデックスを別の PC・場所で使う場合))。記録された置き換え(元のファイルが見つからないとき(元のフォルダを設定する))があれば反映する
開き方 選択行のプレビューの[開く]の右の[▾]のメニュー(通常・新規・読み取り専用)で選ぶと、その開き方でファイルを開き、既定にもする(既定は「通常」)。選んだ開き方は setting.config の openMode に保存し、次回も引き継ぐ(画面での読み書き)。右クリックメニューでは、その時だけ別の開き方も選べる
・通常(normal): 元のファイルをそのまま開く(編集して上書き保存できる)
・読み取り専用(readOnly): 元のファイルを読み取り専用で開く(誤って上書き保存しない)
・新規(new): 元のファイルを基にした無題のブック・文書として開く(元のファイルを占有しない)
もらったインデックスのマクロを持てる形式は、選んだ開き方によらず読み取り専用で開く(もらったインデックスのマクロを持てる形式)
開く前の確かめ インデックスの「ファイル名」は、開く前に testSourceBookName で確かめる。取り込み対象の拡張子(Office・テキスト・PDF。末尾のピリオド・空白は Windows が無視するので外して見る)で、フォルダの区切り・..・:・制御文字・表示の向きを変える文字を含まない名前だけを開く。書き換えたインデックスの evil.hta などは、読み取りの時点(readContentIndexPlaces)で検索結果に出さず、openSource と openWithShell でも断る(ステータス 取り込み対象のファイル名ではないため、開きません:<名前>。getSourceBookRejectedStatus)。画面に出す名前・パスの制御文字は formatDisplayText で U+FFFD にする
Excel 起動中の Excel があればそれを使い、無ければ起動する(COM)。ブックを開き(「読み取り専用」は Workbooks.Open(<元のファイル>, , ReadOnly:=True)、「新規」は Workbooks.Add(<元のファイル>)。そのブックが既に開いていれば、開き方によらずそのブックを使う)、該当シートを表示して、一致したセル(最初に一致したセル。結果の表 の「場所」列に出るセル番地)を選択する。該当シートは「場所」と名前が同じシートとし(図形・コメント・ヘッダー・フッターの場所 <シート名>[図形] <シート名>[コメント] <シート名>[ヘッダー・フッター] は、[…] を除いたシート名。splitObjectPlace の Base。選ぶセルは図形の左上・コメントのセルで、ヘッダー・フッターは行にセル番地が無いためセルを選ばない)、無ければ名前を toSafeFileName で全角に置き換えて一致するシートとする(以前の版のインデックスは、シート名の記号を全角に置き換えてあるため。衝突" と 衝突” のように置き換えると重なるシートがあるので、名前が同じものを先に選ぶ)。Worksheets に同じ名前のシートが無ければ、グラフシート(Charts)から同じ名前・全角に置き換えて一致するものを探して表示する(セルは選ばない)。ブックを開く前に AutomationSecurity を 2(msoAutomationSecurityByUI。Excel のマクロの設定に従う)にし、開いた後に元の値に戻す(finally。起動中の Excel を使うときも設定を残さない。インデクサの 3(強制無効)とは別。Office ファイルを開くときの設定)。COM で失敗したら、ファイルを既定のアプリで開くだけにする(「新規」ならエクスプローラーの[新規]と同じ動作。もらったインデックスのマクロを持てる形式は通常に落とさない)
Word・PowerPoint ファイルを既定のアプリで開く。エクスプローラーの右クリックメニューと同じシェルの動詞を使う(「読み取り専用」は OpenAsReadOnly、「新規」は New)。該当ページ・スライドへの移動はしない(今後の検討)
PDF(.pdf。PDF ファイルの読み取り) ファイルを既定のアプリでそのまま開く(開き方の指定にかかわらない。動詞は試さない。openWithShell)。ステータスは 開きました:<パス>。該当ページへの移動はしない
テキスト(対象の拡張子は 対応するテキストの拡張子) .bat .cmd .ps1 .vbs .js .reg .sh .py .rb .pl .php .lua .mjs .psm1 .psd1(解釈器やシェルで実行・登録になる拡張子)以外は、ファイルを既定のアプリで開く。動詞は試さず、常にそのまま開く(開き方の指定にかかわらない)。テキストの既定のアプリの多くには「読み取り専用」「新規」の動詞が無く、毎回「開けなかったため元のファイルを開きました」と出るのを避けるため。上記の 15 個の拡張子は、既定のアプリではなく固定のパス(%SystemRoot%\System32\notepad.exe)のメモ帳で開く(openWithNotepad。既定のアプリの登録に関わらず実行されない)。いずれも該当行への移動はしない
ファイルが無い・元の場所が分からない 元のファイルのあるフォルダを選んでもらい、その中から探す(元のファイルが見つからないとき(元のフォルダを設定する))。選ばなかった場合は、ステータスに 元のファイルが見つかりません:<パス> と表示する
元のフォルダがネットワークにある 確かめている間・接続できないときの表示は 元のフォルダ・元のファイル・ワークスペースがネットワークにあるとき

右クリックメニュー(右クリックした行を選んでから出す。行の無い所では出さない。並び・文言・太字は判断層の getResultMenuItems が決め、画面層(showResultMenu)はその結果を並べるだけにする。メニューを出すたびに組み直すので、設定の既定の開き方を変えると先頭が付け替わる):

対象 並び
ヒットした行 先頭に既定の開き方(設定の「ファイルの開き方」。太字。ダブルクリックと同じ処理)。その下に、ほかの開き方を[開く ▾]と同じ順(開く・新規で開く・読み取り専用で開く)で。[読み取り専用で開く]は Office の形式(testReadOnlySupported)だけに出す(それ以外は読み取り専用の開き方が無いため、既定が「読み取り専用」でも[開く]を太字にする)。続けて[フォルダを開く]、区切り、[選んだ行をコピー][ファイルのパスをコピー]
ファイルの見出し [読み取り専用で開く](太字。Office の形式だけ。それ以外は[開く]が太字)、ほかの開き方(ヒットした行と同じ並び)、[フォルダを開く]、区切り、[ファイルのパスをコピー][この結果を折りたたむ](折りたたまれているときは[この結果を開く])

行のメニューの先頭に出した開き方は、下の並びからは省く(同じ項目を 2 回出さない)。ヒットした行を複数選んでいて、その中の行を右クリックしたときだけ選びを変えない([選んだ行をコピー]のため)。見出しや、見出しを含む選びでは、右クリックした行だけを選ぶ。複数選んだ行の中を右クリックしたときの 1 件だけの操作([開く]など)は、選びを変えないので、先に選んだ行(SelectedItem)に効く。メニューの種類も押したときの対象も、この選びで決まる。「…」はダイアログが開く項目にだけ付け、キー操作は書かない。

メニュー 動作
開く 「通常」で開く
読み取り専用で開く 「読み取り専用」で開く
新規で開く 「新規」で開く
この結果を折りたたむ・この結果を開く 見出しの下の行を閉じる・開く(見出しのクリックと同じ)
フォルダを開く 選択行のプレビューの[フォルダを開く]と同じ。エクスプローラーで元のファイルを選択した状態で開く(explorer /select,)。ファイルが無い・元の場所が分からない場合は、元のファイルを開くときと同じくフォルダを選んでもらう
選んだ行をコピー(Ctrl+C のキーでも同じ) 選択行を work/search_results.txt と同じ形式(toResultHeader の見出し+toResultLine の各行)でクリップボードに入れる。Excel に貼るとセルが元の列の位置に並ぶ。場所の文字は場所ごとの表記(describePlace。[シート]売上 など。セル番地は付けない)で、ファイル名と行番号の列は残す
ファイルのパスをコピー 元のファイルのフルパス(置き換えを反映。分からない場合は、インデックスの中の位置 <相対フォルダ>\<元のファイル名>)。ファイルがあるかは確かめず、フォルダも聞かない

「読み取り専用」「新規」で開く:

開き方 開いた後 元のファイル
通常 元のファイルを編集し、上書き保存できる 編集できる状態で開く
読み取り専用 上書き保存はできない(編集するときは名前を付けて保存する)。誤って元のファイルを変えてしまうことがない 読み取り専用で開く(実測では、開いている間もほかのアプリ・利用者が書き込めた)
新規 元のファイルを基にした新しい無題のブック・文書(例: 見積.xlsx → 見積1)。保存するときは名前を付けて保存になる 読み込む間だけ読み、開いた後は占有しない。共有フォルダのファイルをほかの人が編集中でも開け、ほかの人の編集・上書き保存も妨げない
  • 新規で開く(Office 以外): 「新規」の開き方が無い種類(テキスト・PDF)は、元のファイルのコピーを作って開く。getOpenNewMethod が、Excel(Workbooks.Add)・動詞(.doc*・.ppt* の New)・コピーを決める。コピーは裏の仕事で、work\tmp\<PC の鍵>\open_copy\<12 桁の英数字>\<元の名前>(コピー yyyyMMdd-HHmm).<拡張子> に作る(getOpenCopyName)(copySourceForOpen。元のファイルは共有で読むだけ)。テキストはメモ帳で開く判断(testTextOpenWithNotepad)をコピーのパスで行い、そのほかは既定のアプリで開く(ステータス コピーを新規で開きました(コピー:<コピーのパス>。保存してもこのコピーに書かれ、元のファイルは変わりません):<パス>。メモ帳のときは コピーをメモ帳で新規で開きました(…):<パス>。getOpenCopyOpenedStatus)。コピーも開くのもパスをそのまま(リテラルで)渡すため、名前に [ ] を含んでも断らない。パスが長すぎるときは、コピーを作る前に断る(getOpenCopyBlocker)。作れなければ何も開かず 新規で開くためのコピーを作れませんでした。<理由>元のファイルを開くには[開く]を使ってください:<パス> と出す。理由は copySourceForOpen が返す Reason(TooLong は長すぎる、Place はコピーの置き場所を確かめられなかった、Failed はコピーを書き込めなかった。getOpenCopyFailedStatus)で書き分ける。
  • コピーの片付け: 閉じるときには消さない(開いたアプリが使っている間は消せないため)。起動のたびに 1 回、裏の仕事で open_copy の直下のフォルダのうち、最後に使ってから(フォルダの作成・更新と、中のファイルの更新のうち新しい方。getOpenCopyLatestTime。現在より先の日時は時計のずれとみなして消さない)1 日より古いものだけを、ファイルを 1 つずつ消してから空のフォルダを消す(clearOldOpenCopies。開かれていて消せないものは残す)。作る前・消す前に、置き場所がワークスペースの tmp\<PC の鍵>\open_copy そのものであり、open_copy・<PC の鍵>・tmp がリンク(ジャンクション・シンボリックリンク)でないことを確かめる(testOpenCopyDir。相対パス・別の場所・リンクのときは作らず、消さない)。中のリンクは辿らず、消さない。強制終了の片付け(removeStaleTmpDirs)は数字の名前のフォルダだけを消すので、open_copy は消えない。
  • Word・PowerPoint はシェルの動詞で開く。その動詞が登録されていない種類のファイルは、元のファイルをそのまま開き、ステータスに 読み取り専用で開けなかったため、元のファイルを開きました:<パス> / 新規で開けなかったため、元のファイルを開きました:<パス> と表示する。ProcessStartInfo.Verbs は New を一覧に含めないため、事前に確かめず実行して例外(Win32Exception)で判断する(openWithShell)。
  • Start-Process はパスの [ ] をワイルドカードとして扱うため、ProcessStartInfo で開く。メモ帳を開く openWithNotepad は、開くパス(固定)とは別に引数(元のファイルのパス)を -ArgumentList で渡すため、この問題は起きない([ ] を含むパスでも開ける)。
  • 開き方の既定は、起動時に設定から読み込むときは保存しない(設定していない利用者の setting.config を作らないため。画面での読み書き)。

元のフォルダの特定(インデックスを別の PC・場所で使う場合)

インデクサは元のフォルダの記録(source_folder.txt。インデックス名とクロール対象フォルダの対応。クロール対象フォルダと取り込み対象)を、各インデックスのフォルダ(work\store\content\<インデックス名>)に 1 件分ずつ置く。このため、work\store\content ごとコピーしても、<インデックス名> のフォルダだけを別の PC の work\store\content 直下へコピーしても、元のファイルの場所が分かる。

flowchart TD
    A["検索結果<br>(Root = 検索対象フォルダ、RelDir)"] --> B{"Root が work\store\content なら、取り込み一覧・設定に<br>RelDir の先頭のインデックス名がある?"}
    B -- はい --> K["元のフォルダ\残りのフォルダ\ファイル名"]
    B -- いいえ --> B2{"Root\#lt;インデックス名#gt; の 元のフォルダの記録 に<br>そのインデックス名がある?<br>(インデックス 1 個をコピーした場合)"}
    B2 -- はい --> K
    B2 -- いいえ --> C{"Root 自身、または Root の親フォルダの<br>元のフォルダの記録 に Root のフォルダ名がある?<br>(インデックス名のフォルダを検索対象にした場合)"}
    C -- はい --> K2["元のフォルダ\RelDir\ファイル名"]
    C -- いいえ --> U["元のフォルダが分からない<br>(インデックス名は分かるため、<br>フォルダを選んでもらえば記録できる。4.5.2)"]

対応は次の順に読み、後のもので上書きする(getSourceFolderMap)。設定が最も優先されるため、フォルダを移したときは設定の場所(インデックス名に対する 1 か所)を書き換えるだけで、元のファイルを開けるようになる。

順 情報 内容
1 インデックスの元のフォルダの記録(source_folder.txt。<インデックス名> のフォルダの中。検索対象フォルダにインデックス名のフォルダを直接指定した場合は、その直下) インデックスを作ったときの場所。インデックスをコピーしても付いてくる
2 取り込み一覧(work\store\ingest_status.tsv) 既定の本文インデックスのフォルダ(work\store\content)のときだけ
3 設定(setting.config の targetFolders / indexSources) インデックス名に対する今の置き場所。利用者が指定した情報のため最優先
  • 読んだ対応は、検索対象フォルダごとに画面でキャッシュする(インデックス作成が終わったとき・元のフォルダを設定したときに捨てる)。
  • 元のフォルダの記録の無い古いインデックスは、インデックス作成を 1 回実行すると作られる(更新が必要なファイルが無くても作る)。
  • どれにも無い場合は、元のフォルダが分からない(Known = $false)。インデックス名(相対フォルダの先頭)は分かるため、フォルダを選んでもらえば設定に記録できる(元のファイルが見つからないとき(元のフォルダを設定する))。

もらったインデックスの元のフォルダを確かめる

work\store\content\ に手でコピーしたインデックスの元のフォルダの記録(source_folder.txt・取り込み一覧)は、そのインデックスを作った人が書いたもので、この PC の利用者が決めた場所ではない。そこで、検索結果から開くときに、元のフォルダに触れる前(ファイルがあるかの確認・共有フォルダへの接続の前)に、一度だけ利用者に確かめる(testSourceNeedsConfirm)。

flowchart TD
    A["検索結果から開く"] --> B{"元のフォルダが記録から分かり、<br>そのインデックス名が設定の<br>targetFolders / indexSources に無い?"}
    B -- いいえ --> Z["元のフォルダを確かめて開く<br>(元のファイルが見つからないとき、へ)"]
    B -- はい --> C{"確認ダイアログ<br>[フォルダを選ぶ][このフォルダを使う]"}
    C -- キャンセル --> X["ステータス「開くのをやめました」<br>(元のフォルダには触れない・何も記録しない)"]
    C -- このフォルダを使う --> U["setIndexSourceFolder で記録<br>(次からこのインデックスは聞かない)"] --> Z
    C -- フォルダを選ぶ --> P["フォルダ選択から始める<br>(「見つかりません」の確認は挟まない)"]
  • 確かめるかどうかはインデックス名を単位にする。設定(targetFolders / indexSources)にある名前(この PC で作ったインデックス・確かめ済みのインデックス)は聞かない。設定は開くたびに読み直す(getConfirmedSourceNames。キャッシュしない)。名前は大文字・小文字だけを区別せず、文字の並びそのもので比べる(testNameInList。OrdinalIgnoreCase。ソフトハイフンなどの見えない文字が混じった名前は別の名前になり、確認を避けられない)。
  • 確認のあとに元のフォルダを記録する道([このフォルダを使う]・[フォルダを選ぶ]で見つかったとき。setIndexSourceFolder)も、同じ比べ方(OrdinalIgnoreCase・前後の空白を削らない)にそろえる。カルチャに従う -eq や .Trim() で比べると、確認では別の名前とされた名前が、利用者自身の targetFolders の行に一致して元のフォルダを書き換えてしまう。前後に空白(全角空白を含む)がある名前は、設定を読み戻すと空白が削られて確かめ済みにならないため記録せず、開くたびに確かめる。名前が空のときも、確かめ済みと言えないので毎回確かめる(記録はしない)。
  • 記録できる名前かは testSourceNameRecordable(core/source_name.ps1。setIndexSourceFolder の入口の条件と同じ判断)で決める。記録できない名前(空・前後に空白)のときは、確認の説明を このインデックスの名前は記録できないため、[このフォルダを使う]を選んでも、開くたびに確かめます にし、移動先を選んだあとも「元のフォルダを … に変えました」とは出さず「開きました:…」と出す。
  • [フォルダを選ぶ]のあとにフォルダ選択をやめたときは、「見つかりません」ではなく「開くのをやめました」と出す。
  • 元のフォルダがローカルでも確かめる。ローカルのドライブと分からないとき(共有フォルダ・ネットワークドライブ・\\.\UNC\ のようなデバイス名の形。testLocalDrivePath)は、確認の説明に「開くと、このフォルダに接続し、Windows のサインイン情報が送られることがあります」と添える(getSourceConfirmDialog。tebunko 自身は通信せず、接続するのは Windows)。
  • キャンセルしたときは、確認の間に変えていたカーソルを戻す。その行を開く依頼は取り下げる。待っていた別の行の結果も捨てる(依頼の番号を進めるため。元のフォルダ・元のファイル・ワークスペースがネットワークにあるとき)。
  • zip からのインポートは、確認ダイアログで利用者が元のフォルダを確かめて登録する。このため、その確認ダイアログは、目録の元のフォルダがローカルのドライブ(C:\ の形)でなければ(共有フォルダ・\\.\UNC\ や \\.\GLOBALROOT\ のようなデバイス名の形)有無を調べず(SourceExists は $null。接続を待たない。getImportArchiveInfo)、文言は変えない。

確認は確認ダイアログ(確認ダイアログ)で行う。

項目 文言
ダイアログの題 元のフォルダを確かめてください
見出し <ファイル名> の元のフォルダを確かめてください
知らせ ! インデックス [<名前>] に書かれた元のフォルダ(<フォルダ>)
説明 [このフォルダを使う]を選ぶと、次からはこのインデックスについて聞きません。ローカルのドライブと分からないときは先頭に 開くと、このフォルダに接続し、Windows のサインイン情報が送られることがあります。心当たりのない場所なら、[フォルダを選ぶ]で別のフォルダを選んでください。 を足す。記録できない名前のときは、前の一文のかわりに このインデックスの名前は記録できないため、[このフォルダを使う]を選んでも、開くたびに確かめます を出す
ボタン [フォルダを選ぶ][このフォルダを使う](後ろが主ボタン)
キャンセルしたとき(ステータス) 開くのをやめました

もらったインデックスのマクロを持てる形式

設定の targetFolders に名前が無いインデックス(もらったインデックス)の元のファイルのうち、マクロ(ファイルの中のプログラム)を持てる形式は、開き方が「通常」「新規」でも読み取り専用で開く(getSourceOpenMode)。対象の拡張子は .xlsm .xlsb .xls .docm .doc .pptm .ppt(大文字・小文字を区別しない)。

  • もらったインデックスかどうかは、元のファイルを見つけたインデックスの名前を findSourceFile の続きに渡して判定する(openFoundSource が、場所の対応のキャッシュから引き直さない)。名前が渡されないときは、もらったインデックスとして扱う(testSourceReceived)。
  • 読み取り専用に替えたときは、ステータスの終わりに (もらったインデックスのため、マクロを持てる形式は読み取り専用で開きます) を添える。もう読み取り専用を選んでいるときは添えない。
  • 読み取り専用で開けないとき(動詞 OpenAsReadOnly が登録されていない・Excel の COM が使えず動詞でも開けない)は、通常の開き方には落とさず、開かない(openWithShell の -noFallback)。ステータスに もらったインデックスのファイルは読み取り専用で開けなかったため、開きませんでした。[ファイルのパスをコピー]で場所を調べ、確かめてから開いてください:<パス> と出す。
  • 読み取り専用で開くために Excel の AutomationSecurity を 2 にできなかったときは、Excel では開かず(マクロが動く設定のまま開かないため)、上の「読み取り専用で開けないとき」と同じ扱いにする(setExcelAutomationSecurity が例外を出す)。
  • 拡張子は、ファイル名の終わりの . と空白を落としてから見る(Windows は evil.xlsm. を evil.xlsm として開くため)。
  • 自分で作ったインデックス(targetFolders にある名前)と、マクロを持てない形式(.xlsx .docx .pptx など)は、選んだ開き方のまま開く。
  • 読み取り専用は、ファイルを上書きしないための開き方であって、それだけでマクロの実行を止めるものではない。マクロを実行するかは Office の設定(セキュリティセンター)に従う。

元のファイルが見つからないとき(元のフォルダを設定する)

別の PC ではドライブ名・共有フォルダのパスが違う、フォルダを移した、といった場合は元のパスのままでは開けない。その場合は元のファイルのあるフォルダを選んでもらい、そのインデックスの元のフォルダ(今の置き場所)として設定に記録する(setIndexSourceFolder)。インデックス名に対して 1 か所を持つため、以後は同じインデックスのどのファイルも聞かずに開ける。

flowchart TD
    A["元のファイルのパス(4.5.1)"] --> B{"元のフォルダが分かり、<br>ファイルがある?"}
    B -- はい --> O["開く"]
    B -- いいえ --> N{"同じ場所を指す別の書き方<br>ならファイルがある?<br>(getFolderPathAliases)"}
    N -- はい --> R2["その書き方を元のフォルダとして記録<br>(setIndexSourceFolder)→ 開く"]
    N -- いいえ --> Q{"「#lt;ファイル名#gt; が見つかりません」<br>[フォルダを選ぶ]/[キャンセル]"}
    Q -- キャンセル --> S["ステータスに表示して終わる"]
    Q -- フォルダを選ぶ --> P["フォルダを選ぶ"]
    P -- キャンセル --> S
    P --> F{"選んだフォルダの中に<br>元のファイルがある?(findMovedSource)"}
    F -- はい --> R["インデックス名に対する元のフォルダを設定に記録<br>(setIndexSourceFolder)→ 開く"]
    F -- いいえ --> Q2{"「選んだフォルダの中に<br>ありませんでした」<br>[フォルダを選ぶ]/[キャンセル]"}
    Q2 -- フォルダを選ぶ --> P
    Q2 -- キャンセル --> S
  • 記録された場所にファイルが無い場合は、フォルダを聞く前に同じ場所を指す別の書き方でも探す(getFolderPathAliases)。 ファイルサーバーのフォルダは、ネットワークドライブ(Z:\見積)と UNC パス(\\server\share\見積)のどちらでも書けるため、 インデックスを作った PC と、この PC でドライブの割り当てが違っても、聞かずに開ける。見つかった書き方はそのまま元のフォルダとして記録する。 この PC にそのドライブの割り当てが無い場合は別名が分からないため、フォルダを選んでもらう。
  • 選ぶフォルダは、インデックスの元のフォルダに当たるフォルダでも、その下のどのフォルダ(ファイルのあるフォルダなど)に当たるフォルダでもよい。元の相対フォルダが 2024\見積 なら、<選んだフォルダ>\2024\見積\<ファイル名>、<選んだフォルダ>\見積\<ファイル名>、<選んだフォルダ>\<ファイル名> の順に探し、最初に見つかったものを使う。
  • 記録するのは、選んだフォルダから相対フォルダの分だけ上に戻ったフォルダ(findMovedSource の Root)。どのフォルダを選んでも、インデックスの元のフォルダに当たる 1 か所が記録される。上に戻れない場合は記録せず、そのファイルを開くだけにする。
  • 記録先(setIndexSourceFolder、画面での読み書き):
  • そのインデックス名がクロール対象フォルダ(targetFolders)にあれば、そのフォルダの path を書き換える(次のインデックス作成では、この新しいフォルダを更新する)。
  • 無ければ indexSources に {name, path} として記録する(更新しない、検索だけのインデックス)。
  • フォルダ選択の初期位置は、元のパスの上のフォルダのうち存在する最も深いフォルダ。
  • 記録したら、元のフォルダの対応のキャッシュ(元のフォルダの特定(インデックスを別の PC・場所で使う場合))を捨てて読み直す。

確認は確認ダイアログ(確認ダイアログ)で行う。見出しは <ファイル名> が見つかりません、ボタンは[フォルダを選ぶ]。

メッセージ:

場面 メッセージ
ファイルが無い ✗ 記録されていた場所にありません(<パス>)+ → 今ある場所のフォルダを選べば開けます(選んだ場所はインデックス「<名前>」に覚えさせるので、同じインデックスのほかのファイルも次から開けます)
元のフォルダが分からない ✗ このファイルが今どこにあるか、記録がありません(<相対パス>)+ 上と同じ → の行
フォルダ選択の説明 「<元のフォルダ>」に当たるフォルダ(または <ファイル名> のあるフォルダ)を選んでください(元のフォルダが分からない場合は <ファイル名> のあるフォルダ(またはインデックス [<名前>] の元のフォルダ)を選んでください)
選んだフォルダに無い ✗ 選んだフォルダの中にありませんでした(選んだフォルダ:<フォルダ> / 探したファイル:<相対パス>)+ → 別のフォルダを選んで、もう一度探せます
記録した(ステータス) インデックス [<名前>] の元のフォルダを <フォルダ> に変えました(続けて開いた結果で上書きされる)