c++中,如何获得文件属性(创建时间,修改时间,访问时间)?

 我来答
YaNaKaSa
2015-11-04 · TA获得超过114个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:83.4万
展开全部
如果是windows平台,使用如下API:

HANDLE WINAPI FindFirstFile(
__in LPCTSTR lpFileName, //文件路径
__out LPWIN32_FIND_DATA lpFindFileData //文件属性信息
);
该函数可以获取文件制定文件包括时间在内的属性信息。这些信息包含在第二个参数执行的结构中:
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime; //文件创建时间
FILETIME ftLastAccessTime; //文件访问时间
FILETIME ftLastWriteTime; //最近一次修改时间
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;

其中时间FILETIME结构体如下:
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME;
MSDN不推荐自己加减获取系统格式的时间,而是推荐使用
BOOL WINAPI FileTimeToSystemTime(
__in const FILETIME *lpFileTime, //上面获取的时间
__out LPSYSTEMTIME lpSystemTime //系统时间
);

这里获取的是系统时间:
typedef struct _SYSTEMTIME {
WORD wYear; //年
WORD wMonth; //月
WORD wDayOfWeek; //周几
WORD wDay; //日
WORD wHour; //时
WORD wMinute; //分
WORD wSecond; //秒
WORD wMilliseconds; //毫秒
} SYSTEMTIME, *PSYSTEMTIME;

至此,时间成功获取
实例代码:
BOOL FileAttributes( LPCTSTR lpszFilePath/*文件路径*/ )
{
WIN32_FIND_DATA FindFileData = { 0 };

HANDLE hFile = ::FindFirstFile(lpszFilePath, &FindFileData);

if( INVALID_HANDLE_VALUE == hFile )

{ //handling error
return FALSE;
}
SYSTEMTIME CreateTime = { 0 }; //创建时间
SYSTEMTIME AccessTime = { 0 }; //最近访问时间
SYSTEMTIME WriteTime = { 0 }; //最近修改时间
if( !::FileTimeToSystemTime( FindFileData.ftCreationTime , &CreateTime) )
{
//handling error
return FALSE;
}
if( !::FileTimeToSystemTime( FindFileData.ftLastAccessTime , &AccessTime) )
{
//handling error
return FALSE;
}
if( !::FileTimeToSystemTime( FindFileData.ftLastWriteTime, &WriteTime))
{
//handling error
return FALSE;
}
//OK 获取时间了,可以使用时间了

::CloseHandle( hFile );

return TRUE;
}
如果用MFC实现就简单了点:
直接用
static void PASCAL SetStatus(
LPCTSTR lpszFileName,
const CFileStatus& status,
CAtlTransactionManager* pTM = NULL
);
这个静态成员就好了
struct CFileStatus
{
CTime m_ctime; // creation date/time of file 创建时间
CTime m_mtime; // last modification date/time of file 最近修改时间
CTime m_atime; // last access date/time of file 最近访问时间
ULONGLONG m_size; // logical size of file in bytes
DWORD m_attribute; // logical OR of CFile::Attribute enum values
TCHAR m_szFullName[_MAX_PATH]; // absolute path name
};

示例:
TCHAR* pFileName = _T("ReadOnly_File.dat");
CFileStatus status;
CFile::GetStatus(pFileName, status);
//status中就有时间
//直接用CTime的Format函数格式化为随意形式的时间字符串格式即可
更多追问追答
追问
谢谢!能否写出具体的代码啊,要求能够计算出文件的创建和修改的时间差。
追答

间附件,太多了,百度让精简。

在昭显庙写歌的北冥雪
2017-08-26 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:98
采纳率:60%
帮助的人:24.6万
展开全部

标准C++没有这个功能,得通过操作系统API来实现

Windows下是这样的

WIN32_FILE_ATTRIBUTE_DATA    attr;     //文件属性结构体
TCHAR file[20] = "C:\\Windows\\123.txt";     //文件名
GetFileAttributesEx(file,GetFileExInfoStandard,&attr);        //获取文件属性
FILETIME createTime = attr.ftCreationTime;                    //获取文件时间
FILETIME accessTime = attr.ftLastAccessTime;             
FILETIME modifyTime = attr.ftLastWriteTime;
SYSTEMTIME time;                                                     //系统时间结构体
FileTimeToSystemTime(&createTime,&time);             //将文件事件转换为系统时间

创建时间:    年 -----  time.wYear         月-----  time.wMonth   日------ time.wDay

时------  time.wHour        分-----  time.wMinute   秒-----  time.wSecond

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-08-27
展开全部
HANDLE CreateFile(
 LPCTSTR lpFileName, 
 DWORD dwDesiredAccess, 
 DWORD dwShareMode, 
 LPSECURITY_ATTRIBUTES lpSecurityAttributes, 
 DWORD dwCreationDisposition, 
 DWORD dwFlagsAndAttributes, 
 HANDLE hTemplateFile
);  //打开文件
BOOL GetFileTime( 
 HANDLE hFile, 
 LPFILETIME lpCreationTime, 
 LPFILETIME lpLastAccessTime, 
 LPFILETIME lpLastWriteTime 
); //获取文件时间
BOOL FileTimeToSystemTime( 
 const FILETIME* lpFileTime, 
 LPSYSTEMTIME lpSystemTime 
); //转换为系统时间
BOOL CloseHandle( 
 HANDLE hObject
); //关闭文件
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式