文件的创建时间。修改时间,访问时间是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的创建时间。修改时间,访问时间是啥意思?相关的知识,希望对你有一定的参考价值。

我一个EXCEL的文件 查看属性
创建时间: 2011年7月29日 12:57:02
修改时间: 2011年1月27日 16:25:14
访问时间: 2011年7月29日 12:57:02
这是什么意思,为以创建都 7月29 ,而修改却是 1月27?

创建时间是指文件信息第一次出现在当前硬盘上的时间;
修改时间是指文件最近一次被保存的时间;
访问时间是指最近一次文件夹中的任意一个子文件被保存的时间;
三者相互独立,且能利用软件修改。
正常情况下,在一台电脑保存过一个文件,再用U盘复制到另一台电脑上时,就会出现后面那台电脑文件修改时间早于创建时间的情况。而访问时间是指文件夹中某个文件被保存的时间或文件夹的创建时间。文件的访问时间一般没有意义。
但是也必须明白,这三个时间是可以利用软件任意修改的。可以使用Windows API修改这三种时间,这三种时间为64位时间系统,但是系统资源管理器只能显示其中32位的部分。如果你将时间设置为早于1900年1月1日,资源管理器这一栏会显示空白。但是你仍然可以用API读取到你之前设定好的时间。文件修改时间是Windows系统和Linux系统都有的,所以Java中也有提供改变文件修改时间的函数。但Java API没有改变创建时间和访问时间的函数。
如果使用文件内存映射打开文件并保存,文件的三个时间都不会改变。因为文件内存映射绕开了部分的文件管理机制,文件的时间更新也被绕开了。
参考技术A 楼主这个文档是下载的或是别的电脑上复制过来的么?
那个创建时间,是表示这个文件存在于本机上的时间;

而修改时间则不是,那是此文档最近一次进行修改并保存的时间(如果是下载的或别的电脑上复制的,就会修改时间比创建时间还早);

访问时间就不说了,那是最近一次打开该文档的时间本回答被提问者采纳
参考技术B 文件属性是指这个文件是隐藏的、只读的还是系统文件这些! 修改时间是指你最后一次修改这个文件的时间,这并不是说一定要你亲自动手修改,绝大多数文件是程序自己修改的(也就是发生了读写),一个程序的运行需要调用许多文件,程序或许会自动修改这些文件。 访问时间是指最后一次访问这个文件的时间(只发生了读没有写),就像上面说的程序只是调用读取了这些文件,没有修改。 参考技术C 创建时间、修改时间、访问时间都是字面上的意思。
而一些细节是“复制后的副本时创建时间会变为复制时的时间”,而原件的创建时间是不变的。另外一点就是“移动文件时创建时间跟随文件”。也就是说即使你是跨驱动器移动也会保留原来的时间。
还有就是修改时间和文件夹,NTFS 文件系统中文件夹内添加或删除文件也会改变文件夹的修改时间。
访问时间,因为系统是默认关闭访问时间写入的,因为浪费性能。
参考技术D 创建时间:就是文件被创建的时间。
修改时间:文件最后一次被修改的时间。
访问时间:文件最后一次访问的时间。

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好了

 

参考技术A

标准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
); //关闭文件

以上是关于文件的创建时间。修改时间,访问时间是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

共享模式在共享访问中是啥意思?

为访问 mdb 文件创建 OdbcConnection 的 ConnectionString 是啥

OAuth 中的“离线”访问是啥意思?

软件中有时用到时间戳,这个是啥呀,有啥用呀,我指听人说过

“对预检请求的响应未通过访问控制检查”是啥意思?

url 查询中的字符 %7D 是啥意思?