programing:linux-programing:file-splitpath-parse
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
programing:linux-programing:file-splitpath-parse [2020/06/28 16:31] – [背景] yoko | programing:linux-programing:file-splitpath-parse [2020/07/01 10:48] (現在) – [コンパイル実行] yoko | ||
---|---|---|---|
行 6: | 行 6: | ||
---- | ---- | ||
Windowsでは、ファイルパスを分割するのに VC++では `_splitpath()`, | Windowsでは、ファイルパスを分割するのに VC++では `_splitpath()`, | ||
- | Linuxではディレクトリ名やファイル名を取得する `dirname()` や `basename()` 関数が使えるが、所望する結果が得られなかったり、引数のパス領域が書き換えられたりする。そこで、文字列からファイル名要素を抽出する関数を作った。 | + | Linuxではディレクトリ名やファイル名を取得する `dirname()` や `basename()` 関数が使えるが、どうも所望の結果が得られなかったり、引数のパス領域が書き換えられたりする。そこで、文字列からファイル名要素を抽出する関数を作成。 |
+ | |||
+ | この関数の特徴は、入力した文字列を解析して各要素の開始ポインタ位置を戻す。又、戻り値でどの要素が存在してるかを知ることができる。入力した文字列は参照のみで非破壊なので、不要なコピー領域をmallocなどで確保しておかなくても必要な要素のみを抽出できる。 | ||
ファイル要素解析関数 | ファイル要素解析関数 | ||
行 60: | 行 62: | ||
* @brief | * @brief | ||
* @author T.Yokobayashi de JR4QPV | * @author T.Yokobayashi de JR4QPV | ||
- | * @date 2020/06/28 | + | * @date 2020/07/01 |
*/ | */ | ||
行 82: | 行 84: | ||
| | ||
| | ||
- | | + | |
| | ||
| | ||
| | ||
* | * | ||
+ | * @note | ||
+ | | ||
* @attention | * @attention | ||
| | ||
行 113: | 行 117: | ||
if (dname[0] == '/' | if (dname[0] == '/' | ||
flg |= FLG_ABSPATH; | flg |= FLG_ABSPATH; | ||
+ | } | ||
+ | else if ((strcmp(dname, | ||
+ | /* dirname要素あり */ | ||
+ | n = strlen(dname); | ||
+ | bname = & | ||
+ | flg |= FLG_DIRNAME; | ||
} | } | ||
行 159: | 行 169: | ||
*/ | */ | ||
</ | </ | ||
- | |||
- | 本関数の特徴は、入力した文字列を解析して、各要素の開始ポインタ位置を戻す。又、戻り値でどの要素が存在してるかを知ることができる。又、入力した文字列は参照のみで非破壊なので、不要なコピー領域をmallocなどで確保しておかなくても必要な要素のみを抽出できる。 | ||
使い方 | 使い方 | ||
行 180: | 行 188: | ||
int flg; | int flg; | ||
| | ||
+ | if (argc > 1) | ||
+ | inpath = argv[1]; | ||
+ | |||
flg = _parsepath(inpath, | flg = _parsepath(inpath, | ||
if (flg & FLG_DIRNAME) { /* dirname要素あり ? */ | if (flg & FLG_DIRNAME) { /* dirname要素あり ? */ | ||
行 211: | 行 222: | ||
$ ./sample | $ ./sample | ||
dir=/ | dir=/ | ||
+ | |||
+ | $ ./sample / | ||
+ | dir=/aaa/, base=bbb.ccc | ||
</ | </ | ||
+ | |||
+ | * カレントディレクトリのプログラムファイルを実行するには、「./ | ||
+ | |||
行 221: | 行 238: | ||
$ git clone https:// | $ git clone https:// | ||
</ | </ | ||
+ | |||
+ | 関連記事 | ||
+ | ------- | ||
+ | |||
+ | - [[myblog> | ||
+ | |||
参考 | 参考 |
programing/linux-programing/file-splitpath-parse.1593329497.txt.gz · 最終更新: 2020/06/28 16:31 by yoko