
No.1ベストアンサー
- 回答日時:
int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);
かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。
No.6
- 回答日時:
★訂正。
・訂正前⇒『(a)、(b)は既に回答者 No.2、No.3 さんが紹介しています。』
訂正後⇒『(a)、(b)は既に回答者 No.3、No.4 さんが紹介しています。』
・サンプル4のコメントは
// ファイルが存在する
// ファイルは存在しない
ではなくて
// ディレクトリが存在する
// ディレクトリは存在しない
でした。
・訂正、終わり。
No.5
- 回答日時:
★Windows 環境限定なら便利関数があります。
・最初に C/C++ 言語ではファイルやディレクトリの有無を調べる関数はありません。
Windows API 関数(シェル関数)には次のものが用意されています。
(1)PathFileExists…ファイルの有無を調査
(2)PathIsDirectory…ディレクトリの有無を調査
この2つの関数を使えばファイルやディレクトリの存在を確認できます。
・他にも API 関数を利用すれば同等な処理を行えます。
(a)GetFileAttributes…属性を調べるを利用する
(b)FindFirstFile………ファイル検索を利用する
(c)CreateFile…………OPEN_EXISTING定数を指定しても有無を調べられる
どの方法を使っても Windows 環境限定でしか動きませんが一応出来ます。
(a)、(b)は既に回答者 No.2、No.3 さんが紹介しています。
下にサンプルを載せておきます。
サンプル1:
if ( PathFileExists("sample.txt") ){
// ファイルは存在する
}
else{
// ファイルは存在しない
}
サンプル2:
if ( PathIsDirectory("C:\\Documents and Settings\\*****\\My Documents") ){
// ディレクトリは存在する
}
else{
// ディレクトリは存在しない
}
サンプル3:
FILE *fp;
if ( (fp = fopen("sample.txt","r")) != NULL ){
fclose( fp );
// ファイルが存在する
}
else{
// ファイルは存在しない
}
サンプル4:
FILE *fp;
if ( (fp = fopen("C:\\Documents and Settings\\*****\\My Documents\\nul","r")) != NULL ){
// ファイルが存在する
fclose( fp );
}
else{
// ファイルは存在しない
}
解説:
・サンプル1、2 は Win32 API 関数を利用した場合です。
ファイルやディレクトリの有無を調査する専用のシェル関数です。
この関数を利用するには shlwapi.h ヘッダをインクルードして
ShLwApi.Lib ライブラリをリンクして下さい。
・サンプル3、4 は C/C++ 言語でも使えるような記述です。
昔から C 言語などでファイルの有無を調べるにはこの方法が良く使われます。
ディレクトリの方は NUL というデバイス・ファイル名を用いてチェックできます。
なおディレクトリの方は MS-DOS、Windows 系は動作確認していますが他の OS でも
利用できるかは分かりません。使えたらラッキーですね。Unix、Linax 系でも。
・以上。
No.4
- 回答日時:
こんな方法もあります。
<サンプル>
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCommandLine,
int cmdShow)
{
HANDLE hFind;
WIN32_FIND_DATA fd;
hFind=FindFirstFile(パス名,&fd);
if (FindNextFile(hFind,&fd) || !lstrcmpi(ファイル名,fd.cFileName))
MessageBox(0,"指定のパスは存在します","結果",MB_ICONINFORMATION);
else
MessageBox(0,"指定のパスは存在しません","結果",MB_ICONERROR);
FindClose(hFind);
return 0;
}
例えば、「C:\WINDOWS\NOTEPAD.EXE」のようにファイル名なら
hFind=FindFirstFile("C:\\WINDOWS\\NOTEPAD.EXE",&fd);
if (FindNextFile(hFind,&fd) || !lstrcmpi("NOTEPAD.EXE",fd.cFileName))
「C:\WINDOWS\」のようにディレクトリパスならば
hFind=FindFirstFile("C:\\WINDOWS\\*.*",&fd);
if (FindNextFile(hFind,&fd) || !lstrcmpi("",fd.cFileName))
でOKです。
No.3
- 回答日時:
環境を Windows に限定してよいのであれば、 GetFileAttributes でチェックすることができます。
以下に例を上げますのでご参考になさってください。
----
#include <iostream>
#include <windows.h>
using namespace std;
int main(){
switch(::GetFileAttributes(TEXT("filename"))){
case FILE_ATTRIBUTE_DIRECTORY: cout << "is folder" << endl;break;
case -1 : cout << "not found" << endl;break;
default : cout << "is file" << endl;break;
}
return 0;
}
参考URL:http://msdn.microsoft.com/library/ja/default.asp …
No.2
- 回答日時:
> これは処理系?依存の内容ですか?
ディレクトリに関してはそうです。
ファイルに関しては、いったん読み込みモードでオープンして、成功することを確認すれば、一応、処理系に依存せずに実現できます。ただし、細かな話をし出すと、これだけでは不十分です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C ファイル出力で、フォルダがない場合でも作成する方法
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
-
4
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
5
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
6
access関数を説明できる方いますか?
C言語・C++・C#
-
7
PathIsDirectoryを使って
C言語・C++・C#
-
8
LPCWSTRとchar
C言語・C++・C#
-
9
C++でネットワークパスのファイルかフォルダの存在かどうかを取得する方法
C言語・C++・C#
-
10
C言語を用いたファイルの一括削除について
C言語・C++・C#
-
11
C言語のPathFileExistsについて
C言語・C++・C#
-
12
API,PathIsDirectoryについて
Visual Basic(VBA)
-
13
絶対パスからのファイル名の切り離し
C言語・C++・C#
-
14
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
15
読み込み中にアクセス違反が発生しました、と出ます。これを回避することは
C言語・C++・C#
-
16
C言語、ファイルの存在チェック(ワイルドカードで)
C言語・C++・C#
-
17
C言語での引数の省略方法
C言語・C++・C#
-
18
新規作成ファイルパスが有効か無効か判定したい
C言語・C++・C#
-
19
WaitForSingleObjectの使い方について
C言語・C++・C#
-
20
DWORDの実際の型は何でしょうか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
フルパスから最後のディレクト...
-
C言語を用いたファイルの一括削...
-
ExcelVBAでカレントディレクト...
-
「UNCパスはサポートされません...
-
絶対パスの絶対て英語で何でし...
-
セルに入力されたパスでフォル...
-
webアプリケーションでの画像フ...
-
ファイルやディレクトリの存在...
-
GetPrivateProfileStringでini...
-
ファイルダイアログのカレント...
-
C++BuilderにてEFCreateErrorが...
-
VBでのファイル検索について。
-
fopenで別ディレクトリにファイ...
-
デスクトップ上の全ファイル取得
-
圧縮(Zip)について
-
ExcelVBA サーバーの(共有フォ...
-
FTPでリモートのファイル一覧取得
-
最下層のファイルまで取得する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
ファイルやディレクトリの存在...
-
絶対パスの絶対て英語で何でし...
-
「UNCパスはサポートされません...
-
ExcelVBAでカレントディレクト...
-
fopenで別ディレクトリにファイ...
-
windows.hがincludeされない
-
セルに入力されたパスでフォル...
-
ネットワーク上のコンピュータ...
-
webアプリケーションでの画像フ...
-
ExcelVBA サーバーの(共有フォ...
-
C言語を用いたファイルの一括削...
-
FTPでリモートのファイル一覧取得
-
ファイルダイアログのカレント...
-
GetPrivateProfileStringでini...
-
エクセルVBAで相対パスでファイ...
-
AfxLoadLibrary関数で、DLLのハ...
-
Ubuntu テキストファイルをどこ...
おすすめ情報