Perlテックブログ

ITエンジニアの成長意欲を刺激する技術考察、モジュール開発の日記。Perlイベントや国内や海外のPerlの記事の紹介。

C言語でファイル名だけを取得する方法 - Linux, Windows対応

C言語でファイル名だけを取得する方法について書いておきます。

LinuxのスラッシュとWindowsのバックスラッシュに対応しています。

後ろからスラッシュかバックスラッシュを探して、見つかった場合は、その次の位置のポインタを返します。

見つからなかった場合は、先頭のポインタを返します。

// 三つのファイルに対応
const char* file1 = "/home/foo/bar.txt";
const char* file2 = "\\home\\foo\\bar.txt";
const char* file3 = "bar.txt";

const char* file_base = NULL;
int32_t file1_length = (int32_t)strlen(file1);
int32_t found_sep = 0;
for (int32_t i = file1_length - 1; i >= 0; i--) {
  char ch = file1[i];
  if (ch == '/' || ch == '\\') {
    file_base = &file1[i + 1];
    found_sep = 1;
    break;
  }
}
if (!found_sep) {
  file_base = file1;
}