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

選択肢
ア:¥A
イ:¥A¥A
ウ:¥A¥B¥A
エ:¥B¥A(正解)
カレクトディレクトリの移動とパス解釈【午前2 解説】
要点まとめ
- 結論: 最終的なカレントディレクトリはルート直下のディレクトリ「¥B¥A」で、選択肢はエが正解です。
- 根拠: 指定順に絶対パス→親へ移動→親基点の相対パス→現在基点の相対パスを順に適用して正規化した結果です。
- 差がつくポイント: 「先頭が¥か.か..か」による絶対/相対の切り替えと、相対指定(.. と .)の意味を正確に理解すること。
正解の理由
最初に "¥A¥B"(ルート直下の絶対パス)へ移動して、そこから ".." で親(¥A)へ、次に "..¥B" は現在の親(¥A)の親(ルート)へ移動してからルート直下の¥Bへ移ることを示します。最後に ".¥A" は現在のカレント(¥B)配下の¥Aを指すため、最終的に ¥B¥A になります。以上より正解は エ(¥B¥A)です。
よくある誤解
- 「..¥B」を「¥A¥B」と混同し、現在の直上だけを参照して誤処理するミスが多いです。
- "." と ".." の意味を取り違えて、相対基点を誤認するケースもよく見られます。
解法ステップ
- 初期操作 "¥A¥B":先頭が "¥" のため絶対パス。カレントを ¥A¥B にする。
- 次に "..":親へ移動するのでカレントは ¥A に戻る。
- 次に "..¥B":先頭が ".." なので現在の親(¥A の親=ルート)を基点とし、その下の B を指定、よって ¥B。
- 最後に ".¥A":先頭が "." なので現在(¥B)を基点とし、その下の A を指定、結果は ¥B¥A。
選択肢別の誤答解説
- ア: ¥A
- 誤り。途中で "..¥B" によりルート直下の ¥B に移動するため、最終的に ¥A 単独には戻りません。
- イ: ¥A¥A
- 誤り。どの操作でも ¥A の直下にさらに ¥A を作るような移動はしておらず、経路と一致しません。
- ウ: ¥A¥B¥A
- 誤り。「¥A¥B」から始めた後に親へ戻る操作があるため、¥A¥B¥A のように下位へ深く入る経路にはなりません。
- エ: エ(¥B¥A)
- 正解。上記の順序どおりに絶対・親・相対を適用すると最終的にルート直下の B の下にある A、すなわち ¥B¥A になります。
補足コラム
- 絶対パスと相対パス:先頭に「¥」があるものはルート基点の絶対パス、先頭が「.」や「..」は現在または親を基点とする相対パスです。
- パス正規化の考え方:連続する ".." は順に親へ移動するため、順序通りに処理して現在位置を更新することで最終パスが得られます。
- 実務での注意点:OS やシェルによって区切り文字(¥ または /)は異なりますが、概念は同じです。パス操作をコードで扱う場合はライブラリ(例: Python の pathlib)を使うと安全です。
参考の簡単なPython例(概念説明):
from pathlib import PureWindowsPath as P p = P(r'\A\B') p = p.parent # -> \A p = p.parent / 'B' # ..\B -> \B p = p / 'A' # .\A -> \B\A print(p) # \B\A
FAQ
Q: 「..¥B」は現在の親の下の B ですか、それとも現在の親を B に置き換えるのですか?
A: 現在の親を起点にその配下の B を指定する形なので、「親フォルダの下にある B」を指します。
A: 現在の親を起点にその配下の B を指定する形なので、「親フォルダの下にある B」を指します。
Q: 最後の ".¥A" が不要に見える場合がありますが、省略できませんか?
A: 省略形で単に "A" と書くことも多いですが、問題の指定ルールでは先頭が "." なら現在を基点と明示しています。意味は同じで、カレント配下の A を指します。
A: 省略形で単に "A" と書くことも多いですが、問題の指定ルールでは先頭が "." なら現在を基点と明示しています。意味は同じで、カレント配下の A を指します。
関連キーワード: パス表記、絶対パス、相対パス、カレントディレクトリ、パス正規化、ディレクトリ移動

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

