c++中,如何获得文件属性(创建时间,修改时间,访问时间)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中,如何获得文件属性(创建时间,修改时间,访问时间)?相关的知识,希望对你有一定的参考价值。
如果是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函数格式化为随意形式的时间字符串格式即可追问
谢谢!能否写出具体的代码啊,要求能够计算出文件的创建和修改的时间差。
追答间附件,太多了,百度让精简。
唉,还是编译不了啊,会报错
追答那里面是函数,你visual studio哪个版本的。我发给你一个能运行的
追问我的是vs10版的
追答我去,百度把我那天给你发的截屏还有vs2010压缩包给删了。。一直没看,刚发现。
追问是的,能否做个win32控制台那种模式的cpp代码
还满意吗?哥哥
不错不错!非常感谢!“自动监控CPU、内存、GPU使用率”这个怎么做呢
追答GPU在Win DDK里,微软帮助里:(该函数第二个参数中有)
https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff540675.aspx
由于本人不是做硬件驱动的,所以没获取GPU使用率,如果想要,等我闲下来给你做,现在只做了前两个,你要的console版本。
这个地方报错了
程序没问题,
stdafx.cpp右键——属性,预编译头选“创建”,其它cpp选“使用”。
给你exe好了
标准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
参考技术B 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
); //关闭文件
以上是关于c++中,如何获得文件属性(创建时间,修改时间,访问时间)?的主要内容,如果未能解决你的问题,请参考以下文章