首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言找寻最新文件的有关问题

2012-09-18 
求助:关于C语言找寻最新文件的问题我想在一个目录下找寻特定时间的文件,比方说:2012/08/07 12:59修改过的

求助:关于C语言找寻最新文件的问题
我想在一个目录下找寻特定时间的文件,比方说:2012/08/07 12:59修改过的文件,或者找寻修改时间最新的文件,然后输出这个文件的文件名,有什么办法么?

[解决办法]

C/C++ code
    WIN32_FIND_DATA data;    HANDLE hfind;    FILETIME time;    hfind = FindFirstFile("*.*",&data);    while( hfind !=   INVALID_HANDLE_VALUE )     {         time = data.ftLastWriteTime ;         //比较这个时间         printf("%s\n",data.cFileName);         if( !FindNextFile(hfind,&data))          {              hfind = INVALID_HANDLE_VALUE;          }     }    FindClose(hfind);
[解决办法]

表头文件: #include <sys/stat.h>
#include <unistd.h>
定义函数: int stat(const char *file_name, struct stat *buf);
函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
返回值: 执行成功则返回0,失败返回-1,错误代码存于errno

错误代码:
ENOENT 参数file_name指定的文件不存在
ENOTDIR 路径中的目录存在但却非真正的目录
ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接
EFAULT 参数buf为无效指针,指向无法存在的内存空间
EACCESS 存取文件时被拒绝
ENOMEM 核心内存不足
ENAMETOOLONG 参数file_name的路径名称太长


#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>

int main() {
struct stat buf;
stat("/etc/hosts", &buf);
printf("/etc/hosts file size = %d\n", buf.st_size);
}


-----------------------------------------------------
struct stat {
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode; //文件的类型和存取的权限
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid; //用户ID
gid_t st_gid; //组ID
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size; //文件字节数(文件大小)
unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)
unsigned long st_blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
};
参考:linux stat函数讲解

在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。

  与文件相关的几个时间:

  1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。

  2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。

  3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。

[root@bogon ~]# stat anaconda-ks.cfg
File: `anaconda-ks.cfg'
Size: 2337 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 98491 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-06-08 11:31:39.111600945 -0700
Modify: 2012-06-08 11:31:39.121498870 -0700
Change: 2012-06-08 11:31:39.687042856 -0700

  说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态。

热点排行