基本情報技術者 2017年 春期 午前(科目A) 問18
問題文
A, Bという名の複数のディレクトリが、図に示す構造で管理されている。“¥B¥A¥B”がカレントディレクトリになるのは、カレントディレクトリをどのように移動した場合か。ここで、ディレクトリの指定は次の方法によるものとし、→は移動の順序を示す。
〔ディレクトリ指定方法〕
(1) ディレクトリは、“ディレクトリ名¥...¥ディレクトリ名”のように、経路上のディレクトリを順に“¥”で区切って並べた後に、“¥”とディレクトリ名を指定する。
(2) カレントディレクトリは、“.”で表す。
(3) 1階層上のディレクトリは、“..”で表す。
(4) 始まりが“¥”のときは、左端にルートディレクトリが省略されているものとする。
(5) 始まりが“¥”、 “.”、 “..”のいずれでもないときは、左端に“.¥”が省略されているものとする。

選択肢
ア:¥A → ..¥B → .¥A¥B(正解)
イ:¥B → .¥B¥A → ..¥B
ウ:¥B → ¥A → ¥B
エ:¥B¥A → ..¥B
🔒 解説は解答すると表示されます
相対パスとルート起点のディレクトリ移動【午前解説】
正解の理由
正解は ア です。
ルートを起点として各移動を順に評価すると次のようになります。
ルートを起点として各移動を順に評価すると次のようになります。
- 「¥A」:絶対指定なのでカレントが \A(= ¥A)になる。
- 「..¥B」:親に移動してから B に入るため、親はルート → ルート下の B、すなわち \B(= ¥B)になる。
- 「.¥A¥B」:現在のカレント(\B)から相対移動で A\B をたどると最終的に \B\A\B(= ¥B¥A¥B)になる。
以上よりアの手順で目的のカレントディレクトリになります。
解法ステップ
- 初期状態をルート(問題文の前提)とする。
- 各操作を左から順に処理する。操作文字列の先頭で「絶対/相対」を判定する。
- 「¥」で始まる:ルート直下からの絶対パスに置き換える。
- 「..」で始まる:現在の親ディレクトリに移動してから残りを適用。
- 「.」で始まる:現在からの相対パスとして残りを適用。
- それ以外:先頭に暗黙の「.¥」がある相対パスとして扱う。
- 各移動後のカレントを更新し、最終的なパスが目的の ¥B¥A¥B か確認する。
選択肢別の誤答解説
- ア: ¥A → ..¥B → .¥A¥B
ルート→¥A(\A)→親+Bで\B→相対でA\Bを追加し\B\A\B(正解)。 - イ: ¥B → .¥B¥A → ..¥B
ルート→¥B(\B)→相対で B\A を追加し \B\B\A → 親+B で最終 \B\B\B。目的の \B\A\B にはならない。 - ウ: ¥B → ¥A → ¥B
すべて絶対指定のため最後に設定されるのは最後の ¥B(\B)のみ。深さ3の \B\A\B にはならない。 - エ: ¥B¥A → ..¥B
ルート→¥B¥A(\B\A)→親+Bで \B\B になる。\B\A\B にはならない。
よくある誤解
- 「..¥B」を「同じ階層の B に移動する」扱いにする誤り:実際には一度親に上がってから B に入ります。
- 先頭が何もないパスを絶対と誤解する誤り:先頭が「¥」「.」「..」のいずれでもない場合は相対(“.¥”が省略された形)です。
- 絶対指定「¥A」を「ルートの A の下すべてを意味する」などの過剰解釈:単にルート直下の A に移動するだけです。
補足コラム
- 問題中の「¥」はパス区切り文字を表します(環境によってはバックスラッシュやスラッシュに対応)。試験問題では記号そのものの意味に注目してください。
- 実務的には cd コマンドで同様の処理を行います。例えば Unix 系であれば「cd /A」「cd ../B」「cd ./A/B」に相当します(スラッシュに読み替え)。
- 手で追うときは「現在のパス」を必ず書き出してから次の操作を適用する習慣をつけると早く正確になります。
FAQ
Q1: 初期カレントはなぜルートとするのですか?
A1: 問題はルートからの移動を前提に各操作を適用して最終パスを判定する設問です。選択肢に絶対パス(先頭¥)が含まれるため、ルート起点で順に評価するのが自然です。
A1: 問題はルートからの移動を前提に各操作を適用して最終パスを判定する設問です。選択肢に絶対パス(先頭¥)が含まれるため、ルート起点で順に評価するのが自然です。
Q2: 「.¥A¥B」と「A¥B」は同じ意味ですか?
A2: はい。先頭が「.」の相対指定と、先頭が「.」省略された相対指定は同等です。両方とも現在のカレントの下に A¥B をたどります。
A2: はい。先頭が「.」の相対指定と、先頭が「.」省略された相対指定は同等です。両方とも現在のカレントの下に A¥B をたどります。
Q3: 「..¥B」は「B と同じ階層に移動」という理解で正しいですか?
A3: 部分的に正しいですが語義としては「一度親に上がり、そこから B に入る」という操作です。結果的に現在と同じ階層の別のディレクトリ B に移動するケースが多い点に注意してください。
A3: 部分的に正しいですが語義としては「一度親に上がり、そこから B に入る」という操作です。結果的に現在と同じ階層の別のディレクトリ B に移動するケースが多い点に注意してください。
関連キーワード: ディレクトリ、相対パス、絶対パス、カレントディレクトリ、ルートディレクトリ、パス表記、パス解決、cdコマンド、ファイルシステム

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

