November 2005
Beginner to intermediate
594 pages
16h 23m
English
You want information about a file, such as its size, device, last modification time, etc.
Use the C system call stat in <sys/stat.h>. See Example 10-8 for a typical use of stat that prints out a few file attributes.
Example 10-8. Obtaining file information
#include <iostream>
#include <ctime>
#include <sys/types.h>
#include <sys/stat.h>
#include <cerrno>
#include <cstring>
int main(int argc, char** argv )
{
struct stat fileInfo;
if (argc < 2) {
std::cout << "Usage: fileinfo <file name>\n";
return(EXIT_FAILURE);
}
if (stat(argv[1], &fileInfo) != 0) { // Use stat() to get the info
std::cerr << "Error: " << strerror(errno) << '\n';
return(EXIT_FAILURE);
}
std::cout << "Type: : ";
if ((fileInfo.st_mode & S_IFMT) == S_IFDIR) { // From sys/types.h
std::cout << "Directory\n";
} else {
std::cout << "File\n";
}
std::cout << "Size : " <<
fileInfo.st_size << '\n'; // Size in bytes
std::cout << "Device : " <<
(char)(fileInfo.st_dev + 'A') << '\n'; // Device number
std::cout << "Created : " <<
std::ctime(&fileInfo.st_ctime); // Creation time
std::cout << "Modified : " <<
std::ctime(&fileInfo.st_mtime); // Last mod time
}The C++ standard library supports manipulation of file content with streams, but it has no built-in support for reading or altering the metadata the OS maintains about a file, such as its size, ownership, permissions, various timestamps, and other information. However, standard C contains a number of standard system ...