programing:linux-programing:file-splitpath-parse
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| programing:linux-programing:file-splitpath-parse [2020/07/01 10:29] – [コンパイル実行] yoko | programing:linux-programing:file-splitpath-parse [2026/07/28 13:16] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | パス文字列からディレクトリ名やファイル名を取得 | + | ====== |
| - | ========================================== | + | |
| Linuxでパス文字列からディレクトリ名やファイル名を分割取得するのに、各要素を解析取得する関数を作ったので備忘録を残す。 | Linuxでパス文字列からディレクトリ名やファイル名を分割取得するのに、各要素を解析取得する関数を作ったので備忘録を残す。 | ||
| - | 概要 | + | ===== 概要 |
| - | ---- | + | |
| Windowsでは、ファイルパスを分割するのに VC++では `_splitpath()`, | Windowsでは、ファイルパスを分割するのに VC++では `_splitpath()`, | ||
| Linuxではディレクトリ名やファイル名を取得する `dirname()` や `basename()` 関数が使えるが、どうも所望の結果が得られなかったり、引数のパス領域が書き換えられたりする。そこで、文字列からファイル名要素を抽出する関数を作成。 | Linuxではディレクトリ名やファイル名を取得する `dirname()` や `basename()` 関数が使えるが、どうも所望の結果が得られなかったり、引数のパス領域が書き換えられたりする。そこで、文字列からファイル名要素を抽出する関数を作成。 | ||
| 行 10: | 行 8: | ||
| この関数の特徴は、入力した文字列を解析して各要素の開始ポインタ位置を戻す。又、戻り値でどの要素が存在してるかを知ることができる。入力した文字列は参照のみで非破壊なので、不要なコピー領域をmallocなどで確保しておかなくても必要な要素のみを抽出できる。 | この関数の特徴は、入力した文字列を解析して各要素の開始ポインタ位置を戻す。又、戻り値でどの要素が存在してるかを知ることができる。入力した文字列は参照のみで非破壊なので、不要なコピー領域をmallocなどで確保しておかなくても必要な要素のみを抽出できる。 | ||
| - | ファイル要素解析関数 | + | ===== ファイル要素解析関数 |
| - | ------------------ | + | |
| 以下にプログラムコードを示す。 | 以下にプログラムコードを示す。 | ||
| 行 62: | 行 59: | ||
| * @brief | * @brief | ||
| * @author T.Yokobayashi de JR4QPV | * @author T.Yokobayashi de JR4QPV | ||
| - | * @date 2020/06/28 | + | * @date 2020/07/01 |
| */ | */ | ||
| 行 84: | 行 81: | ||
| | | ||
| | | ||
| - | | + | |
| | | ||
| | | ||
| | | ||
| * | * | ||
| + | * @note | ||
| + | | ||
| * @attention | * @attention | ||
| | | ||
| 行 115: | 行 114: | ||
| if (dname[0] == '/' | if (dname[0] == '/' | ||
| flg |= FLG_ABSPATH; | flg |= FLG_ABSPATH; | ||
| + | } | ||
| + | else if ((strcmp(dname, | ||
| + | /* dirname要素あり */ | ||
| + | n = strlen(dname); | ||
| + | bname = & | ||
| + | flg |= FLG_DIRNAME; | ||
| } | } | ||
| 行 162: | 行 167: | ||
| </ | </ | ||
| - | 使い方 | + | ===== 使い方 |
| - | ----- | + | |
| 上記関数を使ったサンプルプログラム。 | 上記関数を使ったサンプルプログラム。 | ||
| 行 218: | 行 222: | ||
| dir=/aaa/, base=bbb.ccc | dir=/aaa/, base=bbb.ccc | ||
| </ | </ | ||
| + | |||
| + | * カレントディレクトリのプログラムファイルを実行するには、「./ | ||
| + | |||
| - | GitHubから入手 | + | ===== GitHubから入手 |
| - | ------------ | + | |
| 上記のソースファイルを「[[https:// | 上記のソースファイルを「[[https:// | ||
| 行 228: | 行 234: | ||
| </ | </ | ||
| - | 関連記事 | + | ===== 関連記事 |
| - | ------- | + | |
| - [[myblog> | - [[myblog> | ||
| - | 参考 | + | ===== 参考 |
| - | ---- | + | |
| - | 1. [[https:// | + | - [[https:// |
| - | 2. [[https:// | + | |
| - - - - | - - - - | ||
programing/linux-programing/file-splitpath-parse.1593566977.txt.gz · 最終更新: by yoko
