私はそのファイルを開くために使用するCの文字列を持っています。ファイルが存在するかどうかを確認するにはどうすればよいですか?文字列のパスに基づいてCにファイルが存在するかどうかを確認
答えて
機能を使用すると、(アクセスと呼ばれる)
if(access(file_path, F_OK)==0)
//file exists
else
// file does not exists
これはクールだ、私はこの機能が存在するのか分からなかった。 – poundifdef
ほとんどの場合、書き込みのためにファイルを開くのが最も簡単です。問題がある場合は、NULLファイルハンドルを戻します。
もちろん、ファイルから読み込みたい場合は、すぐにハンドルをfclose()しないでください。
また、これはfopen()
が良いです(あなたのプログラムがファイルを読み書きする権限を持っているかどうかを教えてくれていないstat
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[]) {
struct stat s;
if (stat("/path/to/file", &s) == -1) {
printf("Invalid path\n");
} else {
printf("Valid path\n");
}
return 0;
}
を使用することができますこれはパスが存在するかどうかを示します)。
ここでは、誰の回答も(マイナーtweeksで)有効ですが、いくつかの前提があります。まず、実際にファイルをチェックしていれば、それはおそらくファイル/ディレクトリ/ symlink/fifo/socket/etcです。単なるファイルであれば、fopen()、stat()、およびaccess()の各ソリューションは動作しません。
fopen()は、多くのオペレーティングシステム(有効なディレクトリを含む)のほぼすべてのオブジェクトタイプで成功しますが、stat()とaccess()はすべてのオペレーティングシステムのファイルシステムオブジェクトタイプに関係なく成功しますファイルシステムオブジェクトが存在し、現在のセキュリティコンテキスト[ログインしているユーザ]でアクセス可能である)。さらに悪いことに、windowsコンパイラはstatを別々に扱います(msvcのlibにリンクするか、独自のインライン展開を行うため)。関数fopenがnull以外のファイルディスクリプタを返す場合
は、悲しいことに、(ファイルが存在し、あなたがポータブルになりたいかどうかを判断する場合)あなたの最良のアプローチは何かのようです...
#ifdef _WIN32
#include <windows.h>
#else
#include <sys/stat.h>
#include <unistd.h>
#endif
int file_exists(const char* filename) {
#ifdef _WIN32
HANDLE h = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
if (h == INVALID_HANDLE_VALUE)
return 0;
int res = 0;
if (GetFileType(h) == FILE_TYPE_DISK)
res = 1;
CloseHandle(h);
return res;
#else
struct stat st;
if (stat(filename, &st) == -1)
return 0;
return S_ISREG(st.st_mode);
#endif
return 0;
}
- 1. ドライブが存在するか確認する(文字列パス)
- 2. ファイルがローカルに存在するかどうかを確認する文字列を確認する
- 3. ある文字列が別の文字列内に存在するかどうかを確認するテストケース
- 4. jQuery:文字列内に特殊文字が存在するかどうか確認してください。
- 5. 文字列が文字列に存在するかどうかを確認するSSRS式
- 6. 2つのパラメータに基づいてMySQLレコードが存在するかどうか確認してください
- 7. 電子メールに基づいてユーザーが存在するかどうかを確認するユーザー登録 - カスタムユーザーストア
- 8. 列に値が存在するかどうかを確認
- 9. RavenDb 4:文字列の配列の文字列が異なる文字列に存在するかどうかを確認してください。
- 10. C/C++ - Mac OS X - ファイルが存在するかどうかを確認する
- 11. C文字列がパリンドロムかどうかを確認するプログラム
- 12. ファイルがリモートサーバ上に存在し、パスに空白があるかどうかを確認してください
- 13. ファイルが既に同じパスに存在するかどうかを確認してください
- 14. パスが存在するかどうかを確認するには?
- 15. 文字列がWebページに存在するかどうか確認してください
- 16. 文書が存在するかどうかを確認する
- 17. ファイルがtypescriptに存在するかどうか確認してください
- 18. 特定の文字列がC#のリストに存在しないかどうかを確認するにはどうすればよいですか?
- 19. ファイルが存在するかどうかを確認します
- 20. sql server:文字が存在するかどうかを確認して文字を置換するかどうかを確認する
- 21. 文字列に列に文字列が含まれているかどうかを確認する方法MySQL
- 22. jsonオブジェクトのパスが存在するかどうかを確認しますか?
- 23. データベースに文字列が存在するかどうかを確認するパフォーマンスを向上させる
- 24. C++にbmpファイルが存在するか確認する
- 25. javascriptを使用してクエリ文字列の値が存在するかどうかを確認する方法
- 26. 部分文字列が存在するかどうかを確認してください
- 27. XcodeでC++を開かずにファイルが存在するかどうかを確認してください。
- 28. MongoDBとC# - 文書が存在しないかどうかの確認
- 29. Matlabにファイルが存在するかどうかを確認するには?
- 30. XMLタグがファイルに存在するかどうかを確認するには?
あなたがチェックしたことがあります? –
あなたはグーグルや何か試しましたか? – Corbin
最終目標が*ファイルを開く*の場合は、ファイルを開こうとするのが一番簡単です。しかし、ファイルが存在するかどうか(開いても問題ありません)、以下の 'access()'や 'stat()'関数を使いたい場合があります。 – poundifdef