DotNetEx Sourcecode Document 0.0.0.0

- メインページ
- モジュール
- パッケージ
- クラス

- 構成
- 構成索引
- クラス階層
- 構成メンバ

全て クラス ネームスペース 関数 変数 列挙型 列挙型の値 プロパティ イベント グループ ページ
構成 | Public 型 | Public メソッド | Static Public メソッド | Public 変数 | Static Public 変数 | Protected メソッド | Static Protected メソッド | プロパティ | すべてのメンバ一覧
クラス DotNetEx.IO.Path
DotNetEx-IO名前空間

パス文字列クラス(開発中)。 [詳細]

DotNetEx.IO.Pathに対する継承グラフ
[凡例]

## 構成
class | PolicyConflictException
| パス同士の比較や連結などの処理でポリシーが競合する時スローされます。 [詳細]
class | RootParseException
| ポリシーに設定された正規表現でルートと相対パスを解析するのに失敗する時スローされます。 [詳細]

## Public 型
enum | TargetOption { None = 0, Relation = 0x1, Root = 0x2, All = TargetOption.Relation | TargetOption.Root }
| 処理範囲オプション

## Public メソッド
override bool | Equals (object obj)
bool | Equals (Path other)
bool | Equals (System.String other)
override int | GetHashCode ()
override string | ToString ()
| 内部のRootとRelationを足したパス全体を文字列として取得します。
int | CompareTo (System.Object obj)
int | CompareTo (Path other)
int | CompareTo (System.String other)
| Path ()
| デフォルトコンストラクタ。空のPathクラスをコンストラクトします。
| Path (IPathPolicy policy)
| コンストラクタ。任意のポリシーを設定して空のPathクラスを初期化します。 ポリシーはクラスごとに保持され、コピー時に設定がコピーされていきます。 ポリシーにnullが設定されている場合は、それぞれの処理の都度、PathPolicy.Currentがロードされます。 一括してポリシーを置換するときは、PathPolicyインスタンスを生成してパラメータを調整し、PathPolicy.Currentにセットします。 クラス個別にポリシーを設定する時は、クラスインスタンスのPolicyメンバに任意のPathPolicyインスタンスをセットします。
| Path (System.String src)
| コンストラクタ。文字列から新しいパスを作成します。
| Path (System.String src, IPathPolicy policy)
| コンストラクタ。文字列から新しいパスを作成します。 ポリシーはクラスごとに保持され、コピー時に設定がコピーされていきます。 ポリシーにnullが設定されている場合は、それぞれの処理の都度、PathPolicy.Currentがロードされます。 一括してポリシーを置換するときは、PathPolicyインスタンスを生成してパラメータを調整し、PathPolicy.Currentにセットします。 クラス個別にポリシーを設定する時は、クラスインスタンスのPolicyメンバに任意のPathPolicyインスタンスをセットします。
| Path (Path src)
| コピーコンストラクタ
| Path (Path src, IPathPolicy policy)
| コピーコンストラクタ（ポリシーの伝播を止めて別の値を設定します）。
void | Combine (Path combinePath)
| パスを後ろに連結します。 [詳細]
void | Combine (System.String combinePath)
| パスを後ろに連結します。 [詳細]
Path | Intersect (Path path)
| ２つのパスの共通部分（積集合）を取得します。 [詳細]
Path | Intersect (System.String path)
| ２つのパスの共通部分（積集合）を取得します。 [詳細]
Path | RelationTo (Path target)
| 自分のパスから、目標とするパスへ向かう相対パスを生成します。 [詳細]
Path | RelationTo (Path target, int directorySeparatorIndex)
| 自分のパスから、目標とするパスへ向かう相対パスを生成します。 [詳細]
Path | RelationTo (System.String target)
| 自分のパスから、目標とするパスへ向かう相対パスを生成します。 [詳細]
Path | RelationTo (System.String target, int directorySeparatorIndex)
| 自分のパスから、目標とするパスへ向かう相対パスを生成します。 [詳細]
void | RelativeNormalize ()
| 相対パスを解決します。 [詳細]
void | RelativeNormalize (TargetOption separatorNormalizeTarget)
| 相対パスを解決します。 [詳細]
void | RelativeNormalize (TargetOption separatorNormalizeTarget, int separatorNormalizeIndex)
| 相対パスを解決します。 [詳細]
void | SeparatorNormalize ()
| セパレータを統一します。 [詳細]
void | SeparatorNormalize (TargetOption opt)
| セパレータを統一します。 [詳細]
void | SeparatorNormalize (TargetOption opt, System.Char separatorCode)
| セパレータを統一します。 [詳細]
void | SeparatorNormalize (TargetOption opt, int separatorIndex)
| セパレータを統一します。 [詳細]
System.String | ToAbsoluteSystemDirectoryPath ()
| RelativeNormalizeを行ってから末尾にシステムのディレクトリセパレータ(System.IO.Path.DirectorySeparatorChar)を追加し、ディレクトリ形式の文字列としてパスの内容を文字列形式に変換します。 [詳細]
System.String | ToAbsoluteSystemFilePath ()
| RelativeNormalizeを行って、ファイル形式の文字列としてパスの内容を文字列形式に変換します。 [詳細]
System.String | ToRelativeDirectoryPath ()
| 末尾にシステムの相対ディレクトリセパレータ(System.IO.Path.AltDirectorySeparatorChar)を追加し、相対ディレクトリ形式の文字列としてパスの内容を文字列形式に変換します。 [詳細]
System.String | ToRelativeFilePath ()
| 相対ファイル形式の文字列としてパスの内容を文字列形式に変換します。 [詳細]
System.String | ToSystemDirectoryPath ()
| 末尾にシステムのディレクトリセパレータ(System.IO.Path.DirectorySeparatorChar)を追加し、ディレクトリ形式の文字列としてパスの内容を文字列形式に変換します。 [詳細]
System.String | ToSystemFilePath ()
| ファイル形式の文字列としてパスの内容を文字列形式に変換します。 [詳細]

## Static Public メソッド
static bool | Equals (Path pathA, Path pathB)
static bool | Equals (System.String pathA, System.String pathB)
static bool | Equals (System.String pathA, System.String pathB, IPathPolicy policy)
static bool | Equals (Path pathA, System.String pathB)
static int | Compare (Path pathA, Path pathB)
static int | Compare (Path pathA, System.String pathB)
static int | Compare (System.String pathA, System.String pathB)
static int | Compare (System.String pathA, System.String pathB, IPathPolicy policy)
static implicit | operator Path (System.String src)
static bool | operator== (Path pathA, Path pathB)
static bool | operator!= (Path pathA, Path pathB)
static Path | operator+ (Path pathA, Path pathB)
static Path | operator+ (Path pathA, System.String pathB)
static Path | operator+ (System.String pathA, Path pathB)
static bool | IsNullOrEmpty (Path src)
| パスがnullまたはEmptyに一致するか検査します。

## Public 変数
IPathPolicy | Policy
| 解析設定を保持するポリシーインターフェースを取得、設定します。

## Static Public 変数
static readonly Path | Empty
| 空のパスを返します。

## Protected メソッド
IPathPolicy | AnyPolicy (Path merge)
| コンフリクト例外チェックしつついずれかのPolicyを取得します。メンバへのマージはしません。nullになる時はnullではなくカレントポリシーを取得します。
void | MergePolicy (Path merge)
| コンフリクト例外チェックしつつPolicyメンバを外部Policyとマージします。Policyメンバはnullのままになるケースがあります。

## Static Protected メソッド
static IPathPolicy | AnyPolicy (Path pathA, Path pathB)
| コンフリクト例外チェックしつついずれかのPolicyを取得します。メンバへのマージはしません。nullになる時はnullではなくカレントポリシーを取得します。

## プロパティ
Path | Extention`[get, set]`
| 拡張子を取得,設定します。 [詳細]
bool | HasExtention`[get]`
| 拡張子を持っているか確認します。
bool | HasParent`[get]`
| 親要素を持っているか確認します。ディレクトリ区切りが存在し、なおかつディレクトリ区切りより上の階層のパスが空ではない時にTrueを返します。
bool | HasRoot`[get]`
| ルート要素を持っているか取得します。
bool | HasRelation`[get]`
| 相対パス要素(ルート以外の部分)を持っているか取得します。
bool | IsEmpty`[get]`
| 空のパスか確認します。(HasRoot == false) && (HasRelation == false) に等しい値を返します。
bool | IsRelativeOnly`[get]`
| 相対パス(ルート以外の要素)だけで構築されているか取得します。(HasRoot == false) && HasRelationに等しい値を取得します。
bool | IsRootOnly`[get]`
| ルート要素だけで構築されているか取得します。HasRoot && (HasRelation == false)に等しい値を取得します。
Path | MultiExtention`[get, set]`
| 複数拡張子を取得,設定します。 [詳細]
Path | Name`[get, set]`
| 子要素を取得,設定します。
Path | Parent`[get, set]`
| 親要素を取得,設定します。 [詳細]
Path | Relation`[get, set]`
| 相対パス（ドライブレター以外の部分）を取得、設定します。
bool | RelativeDirectoryPathExists`[get]`
| ディレクトリとして存在するか取得します。現在のToRelativeDirectoryPath()が返す文字列をパスとして検査します。
bool | RelativeFilePathExists`[get]`
| ファイルとして存在するか取得します。現在のToRelativeFilePath()が返す文字列をパスとして検査します。
bool | RelativePathExists`[get]`
| パスが存在するか取得します。RelativeDirectoryPathExists||RelativeFilePathExistsに等しい値を返します。
Path | Root`[get, set]`
| ルート（ドライブレター）を取得、設定します。
Path | SingleExtention`[get, set]`
| 拡張子を取得,設定します。 [詳細]
bool | SystemDirectoryPathExists`[get]`
| ディレクトリとして存在するか取得します。現在のToSystemDirectoryPath()が返す文字列をパスとして検査します。
bool | SystemFilePathExists`[get]`
| ファイルとして存在するか取得します。現在のToSystemFilePath()が返す文字列をパスとして検査します。
bool | SystemPathExists`[get]`
| パスが存在するか取得します。SystemDirectoryPathExists||SystemFilePathExistsに等しい値を返します。

## 説明

パス文字列クラス(開発中)。

ここで言うパスとは、ルート要素に相対指定が続く文字列全般を指します。

  >> 通常、ディレクトリやファイルパスのほとんどの部分は、単にスラッシュやバックスラッシュで区切られるだけの文字列です。 ただWindowsのドライブ指定やURLのプロトコル指定などパスに「コマンド的な前置詞」がつく事も一般的で、この前置詞部分をRoot要素として、Relationと別々に管理します。

またポリシーと呼ばれる解析設定(ルートと相対指定を分離するための正規表現パターンや、大文字小文字の無視、ディレクトリ区切りや無効文字郡の設定)が、 DotNetEx.IO.PathPolicyクラスと、読み取り用のDotNetEx.IO.IPathPolicyインターフェースとして提供されます。標準的なポリシーは既にプリセットされていて継承によるカスタマイズも可能です。

特徴
  全体的に見て、.Netの標準Path処理ライブラリに比べると、DotNetEx.IO.Pathクラスは、かなり性格が異なります。

  - 具体的にファイルの有無などを問う事はない。

    「存在しないパスだから正確に処理ができず例外発生する」といった仕様はありません。一定のルールで記述された文字列を文字列として処理するだけのクラスです。 解析設定が矛盾すると例外が起こりますが、扱う文字列の文法不整合などは例外とみなさず暗黙に整形されます（おおむね「ただの誤入力」のような扱いで要素が削除される傾向が強い）。

  - つまり、意図しないパスに変形させられるかも

    代入するだけで相当数の文法解析工程や補正処理に通されます。とくにWindowsパスとして一般的に使えそうもない部位はガリガリ削られていくので、 もしかすると代入するだけで意図しないパスに変形させられるかもしれません。 その意味では、例えばUNIXなど本当に制限の少ないファイルシステムも含めてしっかりサポートしたい時のパス処理には適しません。 一方で「パスの誤入力のようです。ちょっと修正してみましたが、やっぱり開けませんでした」といった、ヒューマンエラーの解決を含めた対話系の処理を簡単に提供できます。
    なお積極的に整形されるのはRelationで、対照的にRootは、最初に文字列解析して分離された後、前後の空白トリムが行われる程度です。その代わり、パス同士の結合処理などRootだけ丸ごと無視されて消える事があります。

  また単なる文字列処理なので、例えばハードリンクした同じ内容の別名のファイルがあっても、パス文字列としては一致しないため、Pathクラスで比較しても同じものとは判定できません。

IPathPolicyの設定方法について

PathクラスはPath.PolicyプロパティでPathクラス個別に文字列の解析ポリシーを保持する事が出来ます(コンストラクトでも文字列とPolicyを指定できる)。 個別のPath.Policyは、コピーコンストラクトや部分抽出するプロパティなどで生成した新しい(部分)クローンPathに伝播していく特性があります。この時次のような問題があります。

- Path同士の処理をする時、異なるポリシーが衝突するシナリオがありうる。
- 全てのPath.Policyを明示的かつ適切に管理するには、無視できない設計コストがかかる。

そのためPath.Policyはnullで省略出来ます。この時はシステム共通の静的なPathPolicy.Currentが参照されます。一方のPath.Policyがnullで、もう一方がnullでなければ、nullでない方のPath.Policyが使用されます。 どちらのPath.Policyもnullではなく、異なるポリシーインスタンスを参照する時だけ衝突してPolicyConflictExceptionがスローされます。よって次のようなスタイルが推奨されます。

- Pathクラスは基本的にPath.Policyをnullで省略し、PathPolicy.Currentから一括管理する。
- 局所的な特例処理を行うところだけ一時的に明示的なPath.Policyを設定し、伝播を止めて衝突を回避するなど、プログラマが細かく個別に管理する。

デフォルトの解析ポリシー

Windowsのドライブ指定から始まるパスとUNCパス、あるいはスキーム指定の付いたURIなどをだいたい画一的に（少なくとも例外をスローせずに） 管理できるポリシーが設定されています。

- ディレクトリセパレータはスラッシュまたはバックスラッシュです
- 「最後にコロンが出現して、そこに続いて1文字以上連続するディレクトリセパレータ」または「最初に１文字以上連続するディレクトリセパレータ」までがRoot。

- ルート以外は全てRelationとして認識されます

  - /document/item.txt ルート＝"/" 相対パス="document/item.txt"
  - //document/item.txt ルート＝"//" 相対パス="document/item.txt"
  - user:/document/item.txt ルート＝"user:/" 相対パス="document/item.txt"
  - c:/document/item.txt ルート＝"c:/" 相対パス="document/item.txt"
  - //document/item.txt ルート＝"//" 相対パス="document/item.txt"
  - file:///c:/document/item.txt ルート＝"file:///c:/" 相対パス="document/item.txt"

  標準の解析ポリシーでは、最初のディレクトリセパレータは常にルート側に吸収されています。なおこの標準の解析ポリシーが一般的パス書式の中で問題になるケースとしては、UNIXの環境変数のパス設定のように、 コロンを使って複数のパスを連結した文字列があります。これをそのまま代入すると、最後のコロンが出現するまでの部分が長大なRootとして解析されます。 このケースでは新しく専用のポリシーを作って調整するか、あらかじめSplitしてください。
  また簡易式ではないURL形式で、ユーザー名やパスワードあるいはポート番号などを含めるフォーマットも対応していません。

暗黙の整形処理
  DotNetEx.IO.Pathでは以下の整形処理が強制的に実行されます（ポリシーを変更すればセパレータ文字など変えられますが、以下の基本的な動作そのものを停止する事は対応していません）。

  - 末尾のディレクトリセパレータは常に削除

    パス文字列だけではファイルとフォルダの区別はありません。ルート要素を除き、末尾のディレクトリセパレータは常に削除されます。

    例）"C:\folder\" >> "C:\folder"

  - ディレクトリ/ファイル要素名のトリム

    ルート要素を除き、相対パス中のディレクトリ/ファイル要素名の前後にある空白は常にトリムされます。

    例）"C:\ folder \" >> "C:\folder"

  - 連続するディレクトリセパレータの削除

    ルート要素を除き、相対パス部分で出現する連続セパレータは全て最初の一つだけが残り、他は削除されます(空白のディレクトリ名をはさんでも連続するセパレータとみなされます)。

    例）"\\folder\ /hoge" >> "\\folder\hoge"

  - 末尾の無為な拡張子セパレータ（またはその連続）の削除と、例外的に保護されるケース。

    Windows環境では、「ファイルパスの末尾に拡張子区切りのドットと空白が連続すると無視される（その名前で作る事も出来ない）」というルールがあります。 さらに言えば、"C:\hoge.txt.."というパスで"c:\hoge.txt"を開く事が出来ます。 このため比較処理を行う場合には"C:\hoge.txt"と"C:\hoge.txt.."は一致する方が望ましくなり、Pathクラスでは、文字列を代入した時点で末尾の..（ポリシーで指定された拡張子区切り、またはその連続）が削除されるようになっています。 ただし、相対パスを意味する.や..も存在し、末尾の無為な拡張子区切りと判別できません。 なのでポリシーによって指定された相対パスのパターンとディレクトリ/ファイル名が前方一致する時、それらの最長文字数だけは無為な拡張子とはみなされないようになります。 つまり"C:\... ."は"C:\.."になり、"C:\..hoge. . .\.parent\test.txt..."は"C:\..hoge\.parent\test.txt"になります。
    なおこの前置相対パス保護機構は、字句解析などを挟まず単純な一致部分保護しか行いません（大文字小文字無視のフラグだけは反映されます）。 よって"C:\ . .hoge. . ."は"C:\. .hoge"になりますが、"C:\ . . . . ."は"C:\."になります（スペースを挟むため..は一致せず最初の１ドットだけ一致保護されて残りの部分は末尾無為ドットとして削除される）。 またこの前置相対パス保護機構は、Pathインスタンスをコンストラクトする時のRelation部分の分離解析時だけで作用します。Root部分では初期化も含めてこのような整形処理は通されません。

文字コード
  文字コードは.Netの文字列としてUTF16を想定しますがUCS4（サロゲートペア）は対応していません。

## メソッド

void DotNetEx.IO.Path.Combine | ( | Path | combinePath) |  |

パスを後ろに連結します。

現在の自分のRelationの後ろにcombinePath.Relationが連結します。combinePath側のパスのルート要素は無視されます。 接続時にはセパレータ挿入チェックが行われます。相対文法は解決されずそのままデータに残ります。 自身のPolicyがnullである時は連結パス側のPolicyが自分のポリシーにマージされます。

例外

  PolicyConflictException | 両方ともPolicyがnullでなく、それぞれ違うPolicyインスタンスを参照している

void DotNetEx.IO.Path.Combine | ( | System.String | combinePath) |  |

パスを後ろに連結します。

現在の自分のRelationの後ろにcombinePath.Relationが連結します。combinePath側のパスのルート要素は無視されます。 接続時にはセパレータ挿入チェックが行われます。相対文法は解決されずそのままデータに残ります。 自身のPolicyがnullである時は連結パス側のPolicyが自分のポリシーにマージされます。

例外

  PolicyConflictException | 両方ともPolicyがnullでなく、それぞれ違うPolicyインスタンスを参照している

Path DotNetEx.IO.Path.Intersect | ( | Path | path) |  |

２つのパスの共通部分（積集合）を取得します。

戻り値
  前方一致で検査した２つのパスの共通部分（積集合）。

  まずルート要素の完全一致を検査して、ルートが完全一致するなら相対パス要素が比較されます。ルートが完全一致しないなら、ルート要素も相対要素も空のパスが返ります。

  - ポリシーにディレクトリセパレータが設定されていない場合

    一文字単位で比較し、一致した部分までのパスが返されます。

  - ディレクトリセパレータが設定されている場合

    ディレクトリ単位で比較し、一致した部分までのパスが返されます。

覚え書き
  比較時にはポリシーの設定によって大文字小文字が無視されたり、複数設定されたディレクトリセパレータ同士も同じ文字として判定されます。この時は、最終的な積集合にいずれも自分側のデータがコピーされます。

Path DotNetEx.IO.Path.Intersect | ( | System.String | path) |  |

２つのパスの共通部分（積集合）を取得します。

戻り値
  前方一致で検査した２つのパスの共通部分（積集合）。

  まずルート要素の完全一致を検査して、ルートが完全一致するなら相対パス要素が比較されます。ルートが完全一致しないなら、ルート要素も相対要素も空のパスが返ります。

  - ポリシーにディレクトリセパレータが設定されていない場合

    一文字単位で比較し、一致した部分までのパスが返されます。

  - ディレクトリセパレータが設定されている場合

    ディレクトリ単位で比較し、一致した部分までのパスが返されます。

覚え書き
  比較時にはポリシーの設定によって大文字小文字が無視されたり、複数設定されたディレクトリセパレータ同士も同じ文字として判定されます。この時は、最終的な積集合にいずれも自分側のデータがコピーされます。

Path DotNetEx.IO.Path.RelationTo | ( | Path | target) |  |

自分のパスから、目標とするパスへ向かう相対パスを生成します。

戻り値
  目標とするパスへ向かう相対パス。
  - targetがnullの時は空のパスへ向かう相対パス（＝自分のディレクトリ要素数だけ親参照のパス要素が並ぶ相対パス）。
  - ポリシーにディレクトリセパレータが設定されていない時は空のパス。

me.Relation + me.RelationTo(target) = target
  掲題の式が成立するよう自分のパスから目標とするパスへ向かう相対パスを生成します。（自分自身はファイル名ではなくディレクトリとして認識します）

ルート要素は不問
  この処理ではルート要素が考慮されず、返されるPathのルート要素は常に空になります。よって最初に挙げた等式は、meとtargetのルートが等しい場合のみ成立します。

覚え書き
  自分自身とtargetに与えられたパスに相対指定要素が含まれる場合、内部でそれぞれ相対要素を解決したデータを作り、そこから相対パスを抽出します。

Path DotNetEx.IO.Path.RelationTo | ( | Path | target,
|  | int | directorySeparatorIndex
| ) |  |

自分のパスから、目標とするパスへ向かう相対パスを生成します。

引数

  [in] | directorySeparatorIndex | 相対パスを生成するのに使用するセパレータのインデックス。範囲外のときは最初のディレクトリセパレータ。

戻り値
  目標とするパスへ向かう相対パス。
  - targetがnullの時は空のパスへ向かう相対パス（＝自分のディレクトリ要素数だけ親参照のパス要素が並ぶ相対パス）。
  - ポリシーにディレクトリセパレータが設定されていない時は空のパス。

me.Relation + me.RelationTo(target) = target
  掲題の式が成立するよう自分のパスから目標とするパスへ向かう相対パスを生成します。（自分自身はファイル名ではなくディレクトリとして認識します）

ルート要素は不問
  この処理ではルート要素が考慮されず、返されるPathのルート要素は常に空になります。よって最初に挙げた等式は、meとtargetのルートが等しい場合のみ成立します。

覚え書き
  自分自身とtargetに与えられたパスに相対指定要素が含まれる場合、内部でそれぞれ相対要素を解決したデータを作り、そこから相対パスを抽出します。

Path DotNetEx.IO.Path.RelationTo | ( | System.String | target) |  |

自分のパスから、目標とするパスへ向かう相対パスを生成します。

戻り値
  目標とするパスへ向かう相対パス。
  - targetがnullの時は空のパスへ向かう相対パス（＝自分のディレクトリ要素数だけ親参照のパス要素が並ぶ相対パス）。
  - ポリシーにディレクトリセパレータが設定されていない時は空のパス。

me.Relation + me.RelationTo(target) = target
  掲題の式が成立するよう自分のパスから目標とするパスへ向かう相対パスを生成します。（自分自身はファイル名ではなくディレクトリとして認識します）

ルート要素は不問
  この処理ではルート要素が考慮されず、返されるPathのルート要素は常に空になります。よって最初に挙げた等式は、meとtargetのルートが等しい場合のみ成立します。

覚え書き
  自分自身とtargetに与えられたパスに相対指定要素が含まれる場合、内部でそれぞれ相対要素を解決したデータを作り、そこから相対パスを抽出しています。

Path DotNetEx.IO.Path.RelationTo | ( | System.String | target,
|  | int | directorySeparatorIndex
| ) |  |

自分のパスから、目標とするパスへ向かう相対パスを生成します。

引数

  [in] | directorySeparatorIndex | 相対パスを生成するのに使用するセパレータのインデックス。範囲外のときは最初のディレクトリセパレータ。

戻り値
  目標とするパスへ向かう相対パス。
  - targetがnullの時は空のパスへ向かう相対パス（＝自分のディレクトリ要素数だけ親参照のパス要素が並ぶ相対パス）。
  - ポリシーにディレクトリセパレータが設定されていない時は空のパス。

me.Relation + me.RelationTo(target) = target
  掲題の式が成立するよう自分のパスから目標とするパスへ向かう相対パスを生成します。（自分自身はファイル名ではなくディレクトリとして認識します）

ルート要素は不問
  この処理ではルート要素が考慮されず、返されるPathのルート要素は常に空になります。よって最初に挙げた等式は、meとtargetのルートが等しい場合のみ成立します。

覚え書き
  自分自身とtargetに与えられたパスに相対指定要素が含まれる場合、内部でそれぞれ相対要素を解決したデータを作り、そこから相対パスを抽出しています。

void DotNetEx.IO.Path.RelativeNormalize | ( | ) |  |

相対パスを解決します。

ディレクトリ/ファイル名要素がPolicy.RelativeCurrentDirectoryNameに完全に一致する階層は削除され、 Policy.RelativeParentDirectoryNameに完全に一致する階層があれば、その階層と一つ上位の階層が削除されます。 ルートまで戻ってなおPolicy.RelativeParentDirectoryNameが記述されていても例外は生じず、ルートパスを返します。 ポリシーのパラメータで、ディレクトリセパレータ設定がnullやEmptyだった時はなにもせずに処理に返します。セパレータの統一処理は行われません。

void DotNetEx.IO.Path.RelativeNormalize | ( | TargetOption | separatorNormalizeTarget) |  |

相対パスを解決します。

ディレクトリ/ファイル名要素がPolicy.RelativeCurrentDirectoryNameに完全に一致する階層は削除され、 Policy.RelativeParentDirectoryNameに完全に一致する階層があれば、その階層と一つ上位の階層が削除されます。 ルートまで戻ってなおPolicy.RelativeParentDirectoryNameが記述されていても例外は生じず、ルートパスを返します。 ポリシーのパラメータで、ディレクトリセパレータ設定がnullやEmptyだった時はなにもせずに処理に返します。セパレータの統一処理は行われません。 また引数を渡してセパレータの統一処理も同時に行います。ポリシーに設定されたDirectorySeparatorsの最初のセパレータ文字に統一されます。

引数

  [in] | separatorNormalizeTarget | セパレータの統一処理を行う部分を指定します。SeparatorNormalizeのoptオプションと同じです。

void DotNetEx.IO.Path.RelativeNormalize | ( | TargetOption | separatorNormalizeTarget,
|  | int | separatorNormalizeIndex
| ) |  |

相対パスを解決します。

ディレクトリ/ファイル名要素がPolicy.RelativeCurrentDirectoryNameに完全に一致する階層は削除され、 Policy.RelativeParentDirectoryNameに完全に一致する階層があれば、その階層と一つ上位の階層が削除されます。 ルートまで戻ってなおPolicy.RelativeParentDirectoryNameが記述されていても例外は生じず、ルートパスを返します。 ポリシーのパラメータで、ディレクトリセパレータ設定がnullやEmptyだった時はなにもせずに処理に返します。 また引数を渡してセパレータの統一処理も同時に行うことが出来ます。

引数

  [in] | separatorNormalizeTarget | SeparatorNormalizeのoptオプションと同じです。
  [in] | separatorNormalizeIndex | SeparatorNormalizeのseparatorIndexオプションと同じです。

void DotNetEx.IO.Path.SeparatorNormalize | ( | ) |  |

セパレータを統一します。

ポリシーには複数のセパレータを許容できるよう設定できますが、SeparatorNormalize()は、代入されたパス上にあらわれるセパレータを置換してひとつのセパレータ文字に統一します。

引数のないSeparatorNormalize()は、Relation部分だけを標準のセパレータ文字(ポリシーに設定されたセパレータ文字配列の先頭)に統一します。

覚え書き
  ポリシーにDirectorySeparatorsが設定されていないときは何もしません。

void DotNetEx.IO.Path.SeparatorNormalize | ( | TargetOption | opt) |  |

セパレータを統一します。

引数

  [in] | opt | セパレータを統一する部分指定

ポリシーには複数のセパレータを許容できるよう設定できますが、SeparatorNormalize()は、代入されたパス上にあらわれるセパレータを置換してひとつのセパレータ文字に統一します。

インデックス指定のないSeparatorNormalize()は、標準のセパレータ文字(ポリシーに設定されたセパレータ文字配列の先頭)に統一します。

覚え書き
  ポリシーにDirectorySeparatorsが設定されていないときは何もしません。

void DotNetEx.IO.Path.SeparatorNormalize | ( | TargetOption | opt,
|  | System.Char | separatorCode
| ) |  |

セパレータを統一します。

引数

  [in] | opt | セパレータを統一する部分指定
  [in] | separatorCode | 統一して残すセパレータ文字。Policy.DirectorySeparatorsにseparatorCodeが見つからなければ何もしません。

ポリシーには複数のセパレータを許容できるよう設定できますが、SeparatorNormalize()は、代入されたパス上にあらわれるセパレータを置換してひとつのセパレータ文字に統一します。

覚え書き
  ポリシーにDirectorySeparatorsが設定されていないときは何もしません。

void DotNetEx.IO.Path.SeparatorNormalize | ( | TargetOption | opt,
|  | int | separatorIndex
| ) |  |

セパレータを統一します。

引数

  [in] | opt | セパレータを統一する部分指定
  [in] | separatorIndex | 統一して残すセパレータ文字のインデックス。このインデックスでPolicy.DirectorySeparatorsを参照します。範囲外のときは0番目の要素を使用します。

ポリシーには複数のセパレータを許容できるよう設定できますが、SeparatorNormalize()は、代入されたパス上にあらわれるセパレータを置換してひとつのセパレータ文字に統一します。

覚え書き
  ポリシーにDirectorySeparatorsが設定されていないときは何もしません。

System.String DotNetEx.IO.Path.ToAbsoluteSystemDirectoryPath | ( | ) |  |

RelativeNormalizeを行ってから末尾にシステムのディレクトリセパレータ(System.IO.Path.DirectorySeparatorChar)を追加し、ディレクトリ形式の文字列としてパスの内容を文字列形式に変換します。

ポリシーにDirectorySeparatorsが登録されていれば、それらは全てシステムのディレクトリセパレータに統一されます （SeparatorNormalize()とは異なり、DirectorySeparatorsがシステムのディレクトリセパレータを含まなくても統一します）。

System.String DotNetEx.IO.Path.ToAbsoluteSystemFilePath | ( | ) |  |

RelativeNormalizeを行って、ファイル形式の文字列としてパスの内容を文字列形式に変換します。

ポリシーにDirectorySeparatorsが登録されていれば、それらは全てシステムのディレクトリセパレータに統一されます （SeparatorNormalize()とは異なり、DirectorySeparatorsがシステムのディレクトリセパレータを含まなくても統一します）。

System.String DotNetEx.IO.Path.ToRelativeDirectoryPath | ( | ) |  |

末尾にシステムの相対ディレクトリセパレータ(System.IO.Path.AltDirectorySeparatorChar)を追加し、相対ディレクトリ形式の文字列としてパスの内容を文字列形式に変換します。

ポリシーにDirectorySeparatorsが登録されていれば、それらは全てシステムの相対ディレクトリセパレータに統一されます （SeparatorNormalize()とは異なり、DirectorySeparatorsがシステムの相対ディレクトリセパレータを含まなくても統一します）。

覚え書き
  なお、ルート要素は無加工のまま残ります。厳密に相対パスだけを生成する時はsrc.Relation.ToRelativeDirectoryPath()を利用してください。

System.String DotNetEx.IO.Path.ToRelativeFilePath | ( | ) |  |

相対ファイル形式の文字列としてパスの内容を文字列形式に変換します。

ポリシーにDirectorySeparatorsが登録されていれば、それらは全てシステムの相対ディレクトリセパレータに統一されます （SeparatorNormalize()とは異なり、DirectorySeparatorsがシステムの相対ディレクトリセパレータを含まなくても統一します）。

覚え書き
  なお、ルート要素は無加工のまま残ります。厳密に相対パスだけを生成する時はsrc.Relation.ToRelativeFilePath()を利用してください。

System.String DotNetEx.IO.Path.ToSystemDirectoryPath | ( | ) |  |

末尾にシステムのディレクトリセパレータ(System.IO.Path.DirectorySeparatorChar)を追加し、ディレクトリ形式の文字列としてパスの内容を文字列形式に変換します。

ポリシーにDirectorySeparatorsが登録されていれば、それらは全てシステムのディレクトリセパレータに統一されます （SeparatorNormalize()とは異なり、DirectorySeparatorsがシステムのディレクトリセパレータを含まなくても統一します）。

System.String DotNetEx.IO.Path.ToSystemFilePath | ( | ) |  |

ファイル形式の文字列としてパスの内容を文字列形式に変換します。

ポリシーにDirectorySeparatorsが登録されていれば、それらは全てシステムのディレクトリセパレータに統一されます （SeparatorNormalize()とは異なり、DirectorySeparatorsがシステムのディレクトリセパレータを含まなくても統一します）。

## プロパティ

Path DotNetEx.IO.Path.Extention
| get set

拡張子を取得,設定します。

Policy.IsMultiExtentionの設定によって、Multi/SingleExtentionが切り替わります。

Path DotNetEx.IO.Path.MultiExtention
| get set

複数拡張子を取得,設定します。

.bmp.png のような複数の拡張子を扱う時に使用します。.pngのように最後の一つだけを扱う時はSingleExtentionを使用してください。

MultiExtentionでは、拡張子の前にあるドットは可能な限り長く取得します。

例）test..bmp..png >> MultiExtention="..bmp..png" SingleExtention=".png"

覚え書き
  ディレクトリ/ファイル要素名が相対パス要素(Policy.RelativeCurrentDirectoryName/RelativeParentDirectoryName)に完全一致する場合、拡張子は常に空です。

Path DotNetEx.IO.Path.Parent
| get set

親要素を取得,設定します。

取得する時、ディレクトリ区切りがない時には空の文字列が返ります。

- 取得する時、ルート要素は常にコピーされます。
- 取得する時、Relationにディレクトリ区切り文字がない時は、Relationが空のPathが返されます。
- 代入する時、デスティネーション側のルート要素は常にコピーされます。
- 代入する時、デスティネーション側のRelationにディレクトリ区切り文字がない時は、デスティネーションのRelation全てが子要素として残ります。
- 代入する時、ソース側のRelationにディレクトリ区切りがない時は、ソースのRelation全てが親要素として挿入されます。 親にnullや空のデータを設定すると、相対パス部分からはディレクトリ区切りや現在の親のデータが全て消えて末端の要素名だけが残ります。

Path DotNetEx.IO.Path.SingleExtention
| get set

拡張子を取得,設定します。

.bmp.png のような複数の拡張子を扱う時はMultiExtentionを使用してください。

SingleExtentionでは、拡張子の前にあるドットは１文字だけ取得します。

例）test..bmp..png >> MultiExtention="..bmp..png" SingleExtention=".png"

覚え書き
  ディレクトリ/ファイル要素名が相対パス要素(Policy.RelativeCurrentDirectoryName/RelativeParentDirectoryName)に完全一致する場合、拡張子は常に空です。

このクラスの説明は次のファイルから生成されました:

- K:/Dancer_iMac/UVTexa/DotNetEx/DotNetEx/IO.Path.cs