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

arryang01 2005-05-16 09:30:33
rt,我知道如何获得文件的大小的,可是创建时间,修改时间,访问时间如何获得?
...全文
3226 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
arryang01 2005-05-17
  • 打赏
  • 举报
回复
那系统如果是跨平台的,api接口还能工作吗?
coolvc2002 2005-05-17
  • 打赏
  • 举报
回复
对于这种情况,只能调用操作系统提供的API了,因为没个系统下的文件是不同的,如果你的代码是跨平台(操作系统)的,只能用编译控制符号来控制调用哪个api。

比如:
#IFDEF WINDOW
......
#ELSE UNIX
......
#ELSE LINUX
......
#ENDDEF
fleshboy 2005-05-16
  • 打赏
  • 举报
回复
比方说我的系统给你提供一个接口,原形如下
long GetFileAttribute(char *szFileName, struct FILE_ATTRIB_S *pstFileAttrib)
你就可以调用这个接口来获得一个文件的各种属性,他们都会被包含在 FILE_ATTRIB_S结构中
----------------------------------------------------------------------------------------
帮楼主顶一下&借宝地一用

http://community.csdn.net/Expert/topic/4012/4012041.xml?temp=.352627

进者有分,嘿嘿
fleshboy 2005-05-16
  • 打赏
  • 举报
回复
不用系统提供的截口怎么可以呢,而且各个系统有可能会不太一样,
Win系统啊,*nix系统啊等还有vxworks,psos等等系统都有的系统调用。
zhousqy 2005-05-16
  • 打赏
  • 举报
回复
#include <sys/stat.h>
zhousqy 2005-05-16
  • 打赏
  • 举报
回复
struct stat里有三个这方面的字段,好像是st_mtime, st_ctime, st_atime
horisly 2005-05-16
  • 打赏
  • 举报
回复
C++只有标准的算法库,没有系统库……
yes.
===========
GetFileTime
=====

#include <windows.h>
#include <stdio.h>
//----------- Error Handling Function -------------------
void error(LPSTR lpszFunction)
{
CHAR szBuf[80];
DWORD dw = GetLastError();

sprintf(szBuf, "%s failed: GetLastError returned %u\n",
lpszFunction, dw);

MessageBox(NULL, szBuf, "Error", MB_OK);
ExitProcess(dw);
}
//--------------------------------------------------------

BOOL GetFileTime(HANDLE hFile, LPSTR lpszCreationTime,LPSTR lpszLastAccessTime,LPSTR lpszLastWriteTime)
{
FILETIME ftCreate, ftAccess, ftWrite;
SYSTEMTIME stUTC1, stLocal1,stUTC2,stLocal2,stUTC3,stLocal3;

// -------->获取 FileTime
if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite)){
error("GetFileTime()");
return FALSE;
}
//---------> 转换: FileTime --> LocalTime
FileTimeToSystemTime(&ftCreate, &stUTC1);
FileTimeToSystemTime(&ftAccess,&stUTC2);
FileTimeToSystemTime(&ftWrite,&stUTC3);

SystemTimeToTzSpecificLocalTime(NULL, &stUTC1, &stLocal1);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC2, &stLocal2);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC3, &stLocal3);

// ---------> Show the date and time.
wsprintf(lpszCreationTime, "创建时间:\t%02d/%02d/%d %02d:%02d",
stLocal1.wDay, stLocal1.wMonth, stLocal1.wYear,
stLocal1.wHour, stLocal1.wMinute);
wsprintf(lpszLastAccessTime, "最后访问时间:\t%02d/%02d/%d %02d:%02d",
stLocal2.wDay, stLocal2.wMonth, stLocal2.wYear,
stLocal2.wHour, stLocal2.wMinute);
wsprintf(lpszLastWriteTime, "最后修改时间:\t%02d/%02d/%d %02d:%02d",
stLocal3.wDay, stLocal3.wMonth, stLocal3.wYear,
stLocal3.wHour, stLocal3.wMinute);
return TRUE;
}
//----------------------------------------------------------------
void main(){
HANDLE hFile;
TCHAR szCreationTime[30],szLastAccessTime[30],szLastWriteTime[30];
hFile = CreateFile("text.txt",0,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
GetFileTime(hFile,szCreationTime,szLastAccessTime,szLastWriteTime);
if(hFile == INVALID_HANDLE_VALUE){
error("GetLastWriteTime()");
return;
}
printf("%s\n%s\n%s\n",szCreationTime,szLastAccessTime,szLastWriteTime);
CloseHandle(hFile);
system("pause");
}
积木 2005-05-16
  • 打赏
  • 举报
回复
C++只有标准的算法库,没有系统库……
arryang01 2005-05-16
  • 打赏
  • 举报
回复
不用api不星吗?文件大小可以直接用c++的函数读啊
oyljerry 2005-05-16
  • 打赏
  • 举报
回复
GetFileAttribute

65,190

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧