
2个回答
展开全部
//************************************
// Parameter: const wchar_t * pFn1 输入文件名1
// Parameter: const wchar_t * pFn2 输入文件名2
//************************************
static const int iEarlier = -1; // 文件1比文件2创建晚
static const int iLater = 1; // 文件1比文件2创建早
static const int iEqual = 0; // 创建时间相同(要注意的是,windows系统某些时候会延迟写文件,如果两个文件创建的间隔时间太短,
// 可能创建时间是一样的。此时文件上右键属性时,看到的时间也是一样的)
static const int iError = 2; //出错,无法判断
int CompareFileCreationTime(const wchar_t* pFn1, const wchar_t* pFn2)
{
if(NULL == pFn1 || NULL == pFn2)
{
return iError;
}
if(0 == wcscmp(pFn1, pFn2))
{
return iEqual;
}
//打开文件
HANDLE hFile1 = ::CreateFile(pFn1, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE hFile2 = ::CreateFile(pFn2, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if(INVALID_HANDLE_VALUE == hFile1 || INVALID_HANDLE_VALUE == hFile2)
{
if(INVALID_HANDLE_VALUE != hFile1)
{
::CloseHandle(hFile1);
hFile1 = NULL;
}
if(INVALID_HANDLE_VALUE != hFile2)
{
::CloseHandle(hFile2);
hFile2 = NULL;
}
return iError;
}
//获取文件时间
FILETIME ftCreate1, ftCreate2, ft12, ft13, ft22, ft23;
BOOL bSuc = ::GetFileTime(hFile1, &ftCreate1, &ft12, &ft13);
bSuc &= ::GetFileTime(hFile2, &ftCreate2, &ft22, &ft23);
::CloseHandle(hFile1);
::CloseHandle(hFile2);
if(FALSE == bSuc)
{
return iError;
}
//先比较高位
if(ftCreate1.dwHighDateTime != ftCreate2.dwHighDateTime)
{
return (ftCreate1.dwHighDateTime > ftCreate2.dwHighDateTime ? iLater : iEarlier);
}
//再比较低位
if(ftCreate1.dwLowDateTime == ftCreate2.dwLowDateTime)
{
return iEqual;
}
else
{
return (ftCreate1.dwLowDateTime > ftCreate2.dwLowDateTime ? iLater : iEarlier);
}
}
// Parameter: const wchar_t * pFn1 输入文件名1
// Parameter: const wchar_t * pFn2 输入文件名2
//************************************
static const int iEarlier = -1; // 文件1比文件2创建晚
static const int iLater = 1; // 文件1比文件2创建早
static const int iEqual = 0; // 创建时间相同(要注意的是,windows系统某些时候会延迟写文件,如果两个文件创建的间隔时间太短,
// 可能创建时间是一样的。此时文件上右键属性时,看到的时间也是一样的)
static const int iError = 2; //出错,无法判断
int CompareFileCreationTime(const wchar_t* pFn1, const wchar_t* pFn2)
{
if(NULL == pFn1 || NULL == pFn2)
{
return iError;
}
if(0 == wcscmp(pFn1, pFn2))
{
return iEqual;
}
//打开文件
HANDLE hFile1 = ::CreateFile(pFn1, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
HANDLE hFile2 = ::CreateFile(pFn2, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
if(INVALID_HANDLE_VALUE == hFile1 || INVALID_HANDLE_VALUE == hFile2)
{
if(INVALID_HANDLE_VALUE != hFile1)
{
::CloseHandle(hFile1);
hFile1 = NULL;
}
if(INVALID_HANDLE_VALUE != hFile2)
{
::CloseHandle(hFile2);
hFile2 = NULL;
}
return iError;
}
//获取文件时间
FILETIME ftCreate1, ftCreate2, ft12, ft13, ft22, ft23;
BOOL bSuc = ::GetFileTime(hFile1, &ftCreate1, &ft12, &ft13);
bSuc &= ::GetFileTime(hFile2, &ftCreate2, &ft22, &ft23);
::CloseHandle(hFile1);
::CloseHandle(hFile2);
if(FALSE == bSuc)
{
return iError;
}
//先比较高位
if(ftCreate1.dwHighDateTime != ftCreate2.dwHighDateTime)
{
return (ftCreate1.dwHighDateTime > ftCreate2.dwHighDateTime ? iLater : iEarlier);
}
//再比较低位
if(ftCreate1.dwLowDateTime == ftCreate2.dwLowDateTime)
{
return iEqual;
}
else
{
return (ftCreate1.dwLowDateTime > ftCreate2.dwLowDateTime ? iLater : iEarlier);
}
}
展开全部
stat()获取文件创建时间,并进行比较
如下:获取文件创建时间
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
void main( void )
{
struct stat buf;
int result;
//获得文件状态信息
result =stat( "file.txt", &buf );
//显示文件状态信息
if( result == 0 )
cout<<"文件创建时间:"<<ctime(&buf.st_ctime);
}
如下:获取文件创建时间
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
void main( void )
{
struct stat buf;
int result;
//获得文件状态信息
result =stat( "file.txt", &buf );
//显示文件状态信息
if( result == 0 )
cout<<"文件创建时间:"<<ctime(&buf.st_ctime);
}
追问
比如有buf1和buf2,输出这两个所代表文件的创建时间时,输出的是同一时间,不明白为什么。
追答
stat中的时间还有点差别,你得取你所需
参考 如下:http://blog.csdn.net/wh62592855/article/details/6271016
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询