
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で質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- その他(開発・運用・管理) 【至急】.htaccessによるディレクトリ単位でのリダイレクト 2 2023/08/10 13:46
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
このQ&Aを見た人はこんなQ&Aも見ています
-
C ファイル出力で、フォルダがない場合でも作成する方法
C言語・C++・C#
-
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
C言語を用いたファイルの一括削除について
C言語・C++・C#
-
-
4
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
5
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
6
LPCWSTRとchar
C言語・C++・C#
-
7
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
8
コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法
C言語・C++・C#
-
9
C++でネットワークパスのファイルかフォルダの存在かどうかを取得する方法
C言語・C++・C#
-
10
CString から LPCTSTRの型に変換
C言語・C++・C#
-
11
access関数を説明できる方いますか?
C言語・C++・C#
-
12
C言語での引数の省略方法
C言語・C++・C#
-
13
PathIsDirectoryを使って
C言語・C++・C#
-
14
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
15
CStringの文字列検索&抜き出しについて
C言語・C++・C#
-
16
C言語 配列の長さの上限
C言語・C++・C#
-
17
VC++スレッドの正しい終了のさせかた
C言語・C++・C#
-
18
「fatal error C1189」を回避するには?
C言語・C++・C#
-
19
ビジュアルC++でボタンの有効/無効
C言語・C++・C#
-
20
C言語のPathFileExistsについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
フルパスから最後のディレクト...
-
絶対パスの絶対て英語で何でし...
-
ExcelVBA サーバーの(共有フォ...
-
fopenで別ディレクトリにファイ...
-
webアプリケーションでの画像フ...
-
「UNCパスはサポートされません...
-
圧縮(Zip)について
-
FileDialogのデフォルトのディ...
-
ネットワーク上のコンピュータ...
-
ファイルやディレクトリの存在...
-
GetPrivateProfileStringでini...
-
ファイルダイアログのカレント...
-
ソフトウェアからオープンされ...
-
C言語を用いたファイルの一括削...
-
ShellExecute、エクスプローラ...
-
VBでフォルダ単位のFTP
-
フォルダの物が増えたら、自動...
-
C#でカレントディレクトリの取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
「UNCパスはサポートされません...
-
FTPでputすると空ファイルが出...
-
絶対パスの絶対て英語で何でし...
-
fopenで別ディレクトリにファイ...
-
ExcelVBAでカレントディレクト...
-
ファイルやディレクトリの存在...
-
windows.hがincludeされない
-
セルに入力されたパスでフォル...
-
ネットワーク上のコンピュータ...
-
Ubuntu テキストファイルをどこ...
-
C言語を用いたファイルの一括削...
-
webアプリケーションでの画像フ...
-
新規作成ファイルパスが有効か...
-
ファイルダイアログのカレント...
-
ExcelVBA サーバーの(共有フォ...
-
GetPrivateProfileStringでini...
-
エクセルVBAで相対パスでファイ...
-
マイクラでPythonのプログラミ...
おすすめ情報