Comment puis-je vérifier si un fichier est un fichier en C++?
Comment puis-je vérifier en C++ si un fichier est un fichier normal (et n'est pas un répertoire, d'un tuyau, etc.)? J'ai besoin d'une fonction isFile().
DIR *dp;
struct dirent *dirp;
while ((dirp = readdir(dp)) != NULL) {
if ( isFile(dirp)) {
cout << "IS A FILE!" << endl;
i++;
}
J'ai essayé de comparer dirp->d_type avec (unsigned char)0x8, mais il ne semble pas portable par le biais de différents systèmes.
Vous devez vous connecter pour publier un commentaire.
Vous devez appeler stat(2) sur le fichier, puis utilisez la S_ISREG macro sur st_mode.
Vous pouvez utiliser le portable
boost::filesystem
(La bibliothèque C++ standard n'aurait pas fait ce jusqu'à l'introduction récente de std::le système de fichiers en C++17):C++ lui-même n'a pas affaire avec des systèmes de fichiers, donc il n'y a pas de mobiles dans le langage lui-même. La plate-forme des exemples spécifiques de
stat
pour *nix (comme l'a déjà noté par Martin v. Löwis) etGetFileAttributes
pour Windows.Aussi, si vous n'êtes pas allergique à Boost, il y a assez de la croix-plate-forme
boost::filesystem
.En C++17, vous pouvez utiliser std::filesystem::is_regular_file
Notez que les précédentes version de C++ peut avoir en vertu de std::expérimental::le système de fichiers (Source: http://en.cppreference.com/w/cpp/filesystem/is_regular_file)
Merci à vous tous pour l'aide, j'ai essayé avec
Et il fonctionne très bien. =)