基本情報技術者 2009年 春期 午前(科目A) 問21
問題文
絶対パス名¥a¥a¥b¥cをもつディレクトリがカレントディレクトリであるとき、
相対パス名.¥..¥..¥a¥b¥fileをもつファイルを、絶対パス名で表現したものはどれか.
ここで、ディレクトリ及びファイルの指定方法は、次の規則に従うものとする.
〔ディレクトリ及びファイルの指定方法〕
(1) ファイルは、 “ディレクトリ名¥...¥ディレクトリ名¥ファイル名“のように、経路上のディレクトリを順に“¥“で区切って並べた後に“¥“とファイル名を指定する.
(2) カレントディレクトリは“.“で表す.
(3) 1階層上のディレクトリは“..“で表す.
(4) 始まりが“¥“のときは、左端にルートディレクトリが省略されているものとする.
(5) 始まりが“¥“、 “.“、 “..“のいずれでもないときは、左端にカレントディレクトリ配下であることを示す“.¥“が省略されているものとする.
選択肢
ア:¥a¥b¥file
イ:¥a¥a¥b¥file
ウ:¥a¥a¥a¥b¥file(正解)
エ:¥a¥a¥b¥a¥b¥file
🔒 解説は解答すると表示されます
相対パスの絶対パス変換【午前解説】
正解の理由
相対パス .¥..¥..¥a¥b¥file を左から順に解釈します。カレントディレクトリは ¥a¥a¥b¥c です。
- ".":現在のディレクトリなので位置は変わらず ¥a¥a¥b¥c。
- "..":一階層上に移動 → ¥a¥a¥b。
- "..":さらに一階層上に移動 → ¥a¥a。
- "a":その下の a に移動 → ¥a¥a¥a。
- "b":さらに下の b → ¥a¥a¥a¥b。
- "file":ファイル名を追加 → ¥a¥a¥a¥b¥file。
したがって正解は ウ(¥a¥a¥a¥b¥file)です。
解法ステップ
- カレントディレクトリを確認:¥a¥a¥b¥c。
- 相対パスを左から順に分解:., .., .., a, b, file。
- 各要素を順に適用:"." でそのまま、".." は一段上へ移動、ディレクトリ名は下へ移動。
- 最終的に到達する絶対パスを構成:¥a¥a¥a¥b¥file。
- 選択肢と照合して正しいものを選ぶ(ウ)。
選択肢別の誤答解説
- ア: ¥a¥b¥file
理由:これは ".." を二回適用して上がった先が ¥a¥b とした誤り。実際は二回上がると ¥a¥a になります。 - イ: ¥a¥a¥b¥file
理由:これは ".." を一回だけ上がった結果と解釈してしまった場合の誤り。問題では二回上がります。 - ウ: ¥a¥a¥a¥b¥file
理由:正解。カレントから ".." を二回適用し、その後 a/b/file に降りる正しい解です。 - エ: ¥a¥a¥b¥a¥b¥file
理由:上がった後のディレクトリ構造を誤って展開し、不要な階層(¥a¥b)を挿入している誤りです。
よくある誤解
- 誤解1: 「先頭の '.' は無視して良い」として ".." の回数誤認につながるケース。"." は単に現在位置を示すだけですが処理の起点を明示します。
- 誤解2: ".." をまとめて処理するときに親階層数を間違える。「..¥..」は必ず二階層上がるため順序と回数を数える習慣が必要です。
- 誤解3: ルート(先頭の¥)の有無を混同し、相対結果を相対パスで終わらせてしまう。問題は「絶対パスで表現したもの」を問うています。
補足コラム
パスの正規化(. と .. の解消)はファイルシステム操作で頻出の基本技能です。実装レベルでは、スタックを使ってパス要素を左から順に積み上げ、"." は無視、".." はスタックから一要素をポップする方式が一般的です。OSや言語ライブラリには正規化関数があるため、実務ではそれらを利用すると安全です。ただし試験問題では手計算での正確な追跡力が求められます。
簡単なイメージ(手計算):
- スタック開始:[a, a, b, c]
- "." → そのまま
- ".." → pop → [a, a, b]
- ".." → pop → [a, a]
- "a" → push → [a, a, a]
- "b" → push → [a, a, a, b]
- "file" → 完成 → ¥a¥a¥a¥b¥file
FAQ
Q1: "." が先頭にある意味は必ず考慮する必要がありますか?
A1: はい。"." は現在位置を示すため処理の出発点が明示され、相対解釈の基準になります。省略されている場合はルール(5)でカレント配下とみなしますが、明示されている場合は同じ意味であっても認識して確実に処理します。
A1: はい。"." は現在位置を示すため処理の出発点が明示され、相対解釈の基準になります。省略されている場合はルール(5)でカレント配下とみなしますが、明示されている場合は同じ意味であっても認識して確実に処理します。
Q2: 親階層を上がりすぎたらどうする?(ルートより上へ行く場合)
A2: ルートを超えて上がることは通常無効で、実務ではルートに留まるかエラーになります。試験問題ではそうした事態が問題文で指定されるか、選択肢の配置で対処されています。
A2: ルートを超えて上がることは通常無効で、実務ではルートに留まるかエラーになります。試験問題ではそうした事態が問題文で指定されるか、選択肢の配置で対処されています。
Q3: OSによって区切り文字が違う影響はありますか?
A3: 区切り文字が異なっても(/ や ¥ や \)概念は同じです。試験問題は与えられた区切り(ここでは ¥)に従って解釈します。
A3: 区切り文字が異なっても(/ や ¥ や \)概念は同じです。試験問題は与えられた区切り(ここでは ¥)に従って解釈します。
関連キーワード: パス、絶対パス、相対パス、カレントディレクトリ、ドット, ドットドット、パス正規化、ルートディレクトリ、ファイルシステム

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

