ファイルがディレクトリであるかどうかのテストのクロスプラットフォームな方法

StackOverflow https://stackoverflow.com/questions/2197918

質問

現在、私は(凝縮され、エラーチェックの束を取り出し)のようないくつかのコードを持っています:

dp = readdir(dir);
if (dp->d_type == DT_DIR) {
}

これは私のLinuxマシン上で動作しますswimmingly。しかし、別のマシン上(のSunOS、SPARCのように見える):

SunOS HOST 5.10 Generic_127127-11 sun4u sparc SUNW,Ultra-5_10

Iコンパイル時に次のエラーを取得します:

error: structure has no member named `d_type'
error: `DT_DIR' undeclared (first use in this function)

Iはdirent.hヘッダは(POSIXマシン用)クロスプラットフォームだと思いました。任意の提案ます。

役に立ちましたか?

解決

参考 http://www.nexenta.org/os/Porting_Codefixesするます:

  

Solarisでの構造体のdirent定義はd_typeフィールドが含まれていません。次のように変更を加える必要があるでしょう。

if (de->d_type == DT_DIR)
{
   return 0;
}
  

変更

struct stat s; /*include sys/stat.h if necessary */
..
..
stat(de->d_name, &s);
if (s.st_mode & S_IFDIR)
{
  return 0;
}

statもPOSIX標準であるので、それはより多くのクロスプラットフォームであるべきです。しかし、あなたが標準に従うことif ((s.st_mode & S_IFMT) == S_IFDIR)を使用したい場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top