请问在c语言中如何判断一个文件是否修改过?
比如文件更新的时间如何获得?有专门的函数用来获得文件的属性吗?请高手指点 问题点数:40、回复次数:18Top
1 楼viyar(云烟不倒)回复于 2006-06-04 20:40:43 得分 15
stat函数可以知道
不过得有个对比才行吧Top
2 楼icegrape()回复于 2006-06-04 20:50:18 得分 0
能说得清楚些吗?我的c语言学的不精
对比是指什么?
我现在程序中需要判定一个文件是否更新,也就是文件名是始终不变的,但是在经过一些操作后,文件内容可能已经改变了
想知道通过何种方法可以判断文件的改变Top
3 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 21:10:48 得分 0
mfc相关...
转到相应版块去!Top
4 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-04 21:11:56 得分 0
http://community.csdn.net/Expert/ForumList.asp?typenum=1&roomid=5001Top
5 楼joyself(独来读网)回复于 2006-06-04 23:44:33 得分 0
LZ 什么平台阿Top
6 楼A_B_C_ABC(黄瓜@YouCanDoIt)回复于 2006-06-05 02:17:25 得分 5
比较文件属性中的修改时间也许可行。
MFC的 CFile中static BOOL PASCAL GetStatus( LPCTSTR lpszFileName, CFileStatus& rStatus );
struct CFileStatus
{
CTime m_ctime;
CTime m_mtime;
CTime m_atime;
LONG m_size;
BYTE m_attribute;
TCHAR m_szFullName[_MAX_PATH];
};
其中CTime m_mtime;就是修改时间
Top
7 楼icegrape()回复于 2006-06-05 11:34:43 得分 0
dos系统下,turboc2.0
Top
8 楼icegrape()回复于 2006-06-05 11:35:43 得分 0
不好意思没说清楚
Top
9 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-05 12:35:09 得分 0
好象有困难。。
只有问问做sdk的兄弟们!Top
10 楼jixingzhong(瞌睡虫·星辰)回复于 2006-06-05 12:46:30 得分 5
struct stat statbuf;
FILE *stream;
/* open a file for update */
if ((stream = fopen(FILENAME, "w+")) == NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return(1);
}
/* get information about the file */
stat(FILENAME, &statbuf);
fclose(stream);
...
然后查看 statbuf 中的内容 ...Top
11 楼icegrape()回复于 2006-06-05 15:13:34 得分 0
运行了jixingzhong的程序,作了适当修改如下
#include <sys\stat.h>
#include <stdio.h>
#include <time.h>
#define FILENAME "HAHA.TXT"
main()
{
struct stat statbuff;
FILE *stream;
char ch;
/*open a file for update*/
if((stream=fopen(FILENAME,"r+"))==NULL )
{
fprintf(stderr,"Cannot open output file.\n");
return(1);
}
ch=getchar();
while(ch!='#')
{
fputc(ch,stream);
putchar(ch);
ch=getchar();
}
/*get information about the file*/
stat(FILENAME,&statbuff);
fclose(stream);
printf("Drive letter of file:%c\n",'A'+statbuff.st_dev);
printf("Size of file in bytes:%ld\n",statbuff.st_size);
printf("Time file last opened:%s\n",ctime(&statbuff.st_ctime));
printf("Time file last modified:%s\n",ctime(&statbuff.st_mtime));
return 0;
}
运行结果如下:
Drive letter of file:@
Size of file in bytes:14
Time file last opened:Mon Jun 05 14:25:52 2006
Time file last modified:Mon Jun 05 14:25:52 2006
从键盘对文件输入了新的数据,怎么statbuff.st_ctime时间和st_mtime时间竟然是一样的?
请问可不可以不用fopen打开文件,而得知文件创建时间和修改时间?
因为好像用fopen函数,无论是用"wb""r",.st_ctime和st_mtime都是一样的
再问个问题,st_atime是指的什么?struct stat中各成员变量具体指什么呢?
Top
12 楼ulardili(海盗)回复于 2006-06-05 15:33:48 得分 5
设计个表,然后通过记录在表里的数据判断是否被修改过Top
13 楼nobush()回复于 2006-06-05 16:08:23 得分 10
#include <stdio.h>
#include <sys\stat.h>
main()
{
struct stat buf;
if( stat( "file.txt", &buf ) != -1 ) {
printf( "File last modifie = %s\n", ctime(&buf.st_mtime) );
}
return 0;
}
时间一样因为修改的方式,大多数程序的处理方法都是删掉原文件,保存新文件,因而“修改”=“新建”
Top
14 楼nobush()回复于 2006-06-05 16:12:01 得分 0
struct stat中各成员很多恕难以列举,
st_atime是指 last accessed 一般从字母缩写上猜Top
15 楼icegrape()回复于 2006-06-05 16:59:36 得分 0
st_atime
Time of last access.
st_mtime
Time of last data modification.
st_ctime
Time of last file status change.
st_mtime和ctime具体是什么区别呢?Top
16 楼icegrape()回复于 2006-06-05 17:13:15 得分 0
不好意思,第一次在版上发帖子,谢谢大家的帮助^_^
问句题外话,这个分数20,怎么送呢,由版主吗?
初来乍到,让大家见笑了,hohoTop
17 楼A_B_C_ABC(黄瓜@YouCanDoIt)回复于 2006-06-05 17:56:46 得分 0
st_ctime
Time of createTop
18 楼jixingzhong(瞌睡虫·星辰)回复于 2006-06-07 15:16:43 得分 0
st_mtime
Time of last data modification.
st_ctime
Time of last file status change.
st_mtime和ctime具体是什么区别呢?
=================================
st_mtime 是文件内容修改时间
st_ctime 文件属性修改 ...
关于帖子,楼主是你自己负责揭帖的,
分数合理分配给你认为解答正确的人,
当然,
如果明显分配不合理,
斑竹可能会删除这个帖子,
因为这有的 倒分 的嫌疑 .....Top




