How do i check in C++ if a file is a regular file (and is not a directory, a pipe, etc.)? I need a function isFile().
DIR *dp;
struct dirent *dirp;
while ((dirp = readdir(dp)) != NULL) {
if ( isFile(dirp)) {
cout << "IS A FILE!" << endl;
i++;
}
I've tried comparing dirp->d_type with (unsigned char)0x8, but it seems not portable through differents systems.
In C++17, you may use std::filesystem::is_regular_file
Note that earlier version of C++ may have had it under std::experimental::filesystem (Source: http://en.cppreference.com/w/cpp/filesystem/is_regular_file)
C++ itself doesn't deal with file systems, so there's no portable way in the language itself. Platform-specific examples are
stat
for *nix (as already noted by Martin v. Löwis) andGetFileAttributes
for Windows.Also, if you're not allergic to Boost, there's fairly cross-platform
boost::filesystem
.You need to call stat(2) on the file, and then use the S_ISREG macro on st_mode.
Thank you all for the help, i've tried with
And it works fine. =)
You can use the portable
boost::filesystem
(The standard C++ library could not have done this up until recent introduction of std::filesystem in C++17):