示例在linux如何获取文件信息.
#include
<
unistd.h
>
#include < stdio.h >
#include < stdlib.h >
#include < string .h >
#include < errno.h >
#include < sys / types.h >
#include < sys / stat.h >
#include < dirent.h >
#include < time.h >
static int get_file_size_time( const char * file_path, const char * filename) ... {
struct stat statbuf;
if(stat(file_path,&statbuf) == -1) ...{
printf("Get stat on %s Error:%sn",
filename,strerror(errno));
return -1;
}
//获得目录
if(S_ISDIR(statbuf.st_mode)) ...{
printf("[%s]n",filename);
return 1;
}
//获得文件
if(S_ISREG(statbuf.st_mode)) ...{
printf("%stsize:%ld bytestmodified at %s",
filename,statbuf.st_size,
ctime(&statbuf.st_mtime));
}
return 0;
}
int main( int argc, char ** argv) ... {
DIR *dirp;
struct dirent *direntp;
int stats;
if(argc != 2) ...{
printf("Usage:%s filnamena",argv[0]);
exit(1);
}
//获得文件或错误
if((stats = get_file_size_time(argv[1],argv[1]) == 0)
|| (stats == -1)) exit(1);
//获得目录
if((dirp = opendir(argv[1])) == NULL) ...{
printf("Open Directory %s Error:%sn",argv[1],
strerror(errno));
exit(1);
}
printf("Open Dir %s success.n",argv[1]);
while((direntp = readdir(dirp)) != NULL) ...{
int path_length = strlen(argv[1])
+ strlen(direntp->d_name) + 2;
char *file_path = (char*)malloc(path_length * sizeof(char));
if(file_path == NULL) ...{
fprintf(stderr,"Not enough memory.");
exit(1);
}
strcpy(file_path,argv[1]);
if(file_path[strlen(file_path) - 1] != '/')
strcat(file_path,"/");
strcat(file_path,direntp->d_name);
if(get_file_size_time(file_path,direntp->d_name) == -1) ...{
free(file_path);
break;
}
free(file_path);
}
closedir(dirp);
return 0;
}
#include < stdio.h >
#include < stdlib.h >
#include < string .h >
#include < errno.h >
#include < sys / types.h >
#include < sys / stat.h >
#include < dirent.h >
#include < time.h >
static int get_file_size_time( const char * file_path, const char * filename) ... {
struct stat statbuf;
if(stat(file_path,&statbuf) == -1) ...{
printf("Get stat on %s Error:%sn",
filename,strerror(errno));
return -1;
}
//获得目录
if(S_ISDIR(statbuf.st_mode)) ...{
printf("[%s]n",filename);
return 1;
}
//获得文件
if(S_ISREG(statbuf.st_mode)) ...{
printf("%stsize:%ld bytestmodified at %s",
filename,statbuf.st_size,
ctime(&statbuf.st_mtime));
}
return 0;
}
int main( int argc, char ** argv) ... {
DIR *dirp;
struct dirent *direntp;
int stats;
if(argc != 2) ...{
printf("Usage:%s filnamena",argv[0]);
exit(1);
}
//获得文件或错误
if((stats = get_file_size_time(argv[1],argv[1]) == 0)
|| (stats == -1)) exit(1);
//获得目录
if((dirp = opendir(argv[1])) == NULL) ...{
printf("Open Directory %s Error:%sn",argv[1],
strerror(errno));
exit(1);
}
printf("Open Dir %s success.n",argv[1]);
while((direntp = readdir(dirp)) != NULL) ...{
int path_length = strlen(argv[1])
+ strlen(direntp->d_name) + 2;
char *file_path = (char*)malloc(path_length * sizeof(char));
if(file_path == NULL) ...{
fprintf(stderr,"Not enough memory.");
exit(1);
}
strcpy(file_path,argv[1]);
if(file_path[strlen(file_path) - 1] != '/')
strcat(file_path,"/");
strcat(file_path,direntp->d_name);
if(get_file_size_time(file_path,direntp->d_name) == -1) ...{
free(file_path);
break;
}
free(file_path);
}
closedir(dirp);
return 0;
}