C言語でファイルの存在チェックをしたい

[上に] [前に] [次に]
匿名希望00212 1999/11/10(水) 22:52:59
C言語でファイルの存在チェックをしたいのですが
そのような関数はありますか?
Perlのファイルテスト演算子,"-e"みたいなかんじです。
ご存知の方は教えていただけませんか?
そしてその関数がWindows,UNIXなど
環境依存(ISO C規格なのかどうか)なのかも教えて頂けませんか?

あき 1999/11/11(木) 00:47:29
存在チェックしたあとどういう風にファイルアクセスしたいのか
わからないのではっきりしたことは言えないのですが・・・。

とりあえず簡単な方法としてfopenしてエラーになったら
errnoでエラー内容をチェックするのでは駄目ですか?

環境依存はしないけど。
(でもUNIXではバイナリファイルのopenと読み書き両用のopenは
 できないんでしたっけ?)

きたむら 1999/11/11(木) 02:20:09
わたしはファイルの存在チェックにstatをよく使っています。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

void main(int argc, char **argv)
{
char *fname = argv[1];
struct stat  st;

if (stat(fname, &st) != 0)
printf("%s dosen't exist\n", fname);
else {
switch (st.st_mode & S_IFMT) {
case S_IFREG:
printf("%s is a file\n", fname);
break;
case S_IFDIR:
printf("%s is a dir\n", fname);
break;
default:
printf("%s isn't a file or dir\n", fname);
break;
}
}
}

FreeBSD上のgccと、Win95上のVC++でコンパイルできました。
マニュアルによるとPOSIX規格の関数だそうです。
"POSIX"と"ISO C"ってどういう関係なんでしょう?

Selly [E-Mail] 1999/11/11(木) 04:31:54
Win32APIでGetFileAttributes()というのがあります。

DWORD dwAttr = ::GetFileAttributes(lpszFileName);
if (dwAttr != 0xFFFFFFFF)
{
// ファイルが存在する
}

ばかぼん 1999/11/11(木) 09:10:21
あとはこんな方法も。
int access(char *path, int amode);  #ファイルのアクセス権の判定
pathはファイ名で、amodeにはファイルの存在をチェックする場合、
F_OK(又は0)。
アクセス可能(ファイルがある)とき0を返し、
アクセス不可(ファイルがない)とき-1を返します。

匿名希望00212 1999/11/11(木) 11:14:25
[[解決]]
色々ありがとうございます。
最終的には ばかぼんさん のaccess関数
でやりました。

[上に] [前に] [次に]