社区
C++ Builder
帖子详情
请问如何获取文件的创建日期
giboer
2004-06-29 10:37:13
查到两个函数: FileAge 和 FileGetDate, 可是它们返回的都是文件的修改日期?
...全文
604
15
打赏
收藏
请问如何获取文件的创建日期
查到两个函数: FileAge 和 FileGetDate, 可是它们返回的都是文件的修改日期?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
giboer
2004-06-30
打赏
举报
回复
整理结果:获取文件相关时间的几种方法
1. 使用FileAge() 获取文件创建时间(但好像返回的结果和FileGetDate一样)
用法:
int sTime = FileAge(AnsiString FileName);
Edit1->Text = FileDateToDateTime(sTime);
2.使用FileGetDate() 获取文件编修日期
用法:
int hFile;
hFile = FileOpen("c:\\devcon.exe",fmOpenRead);
int sTime = FileGetDate(hFile);
Edit1->Text = FileDateToDateTime(sTime);
FileClose(hFile);
3. 使用FindFirst()的TSearchRec结构
用法:
TSearchRec sr;
int iAttributes = 0;
SYSTEMTIME sTime;
if (FindFirst("c:\\pppp.vsd", iAttributes, sr) == 0)
{
FileTimeToSystemTime(&(sr.FindData.ftCreationTime),&sTime); //这里是获取创建时间,其他类似
FindClose(sr);
}
Edit1->Text = SystemTimeToDateTime(lpSystemTime);
附:
struct TSearchRec
{
int Time; //--本人测试结果为编修时间,即与FileAge,FileGetDate获取的数值一样。
int Size;
int Attr;
AnsiString Name;
int ExcludeAttr;
int FindHandle;
_WIN32_FIND_DATAA FindData;
void * FindHandle;
char[4097] FindData;
char[257] Pattern;
} ;
---------------------------------------------------------------
4.使用API GetFileTime
用法:其中第二个参数之指示返回三个时间中的哪一个,但注意用GetFileTime返回的最后访
问时间始终是当前时间,因此没有什么意义,好像可以用FindFirst来代替,不过我没有找相
资料。
BOOL MyGetFileTime(AnsiString FileName, int type,SYSTEMTIME &stime)
{
HANDLE hFile = CreateFile (FileName.c_str(), GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILETIME lpCreationTime; // 创建时间
FILETIME lpLastAccessTime; // 最近访问时间
FILETIME lpLastWriteTime; // 最近修改时间
if (GetFileTime(hFile, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime))
{
FILETIME ftime;
switch(type)
{
case 0: FileTimeToLocalFileTime(&lpCreationTime, &ftime); break;
case 1: FileTimeToLocalFileTime(&lpLastAccessTime, &ftime); break;
case 2: FileTimeToLocalFileTime(&lpLastWriteTime, &ftime); break;
default:
CloseHandle(hFile); // 关闭文件
return False;
}
FileTimeToSystemTime(&ftime, &stime); // 转换成系统时间格式
CloseHandle(hFile); // 关闭文件
return True;
}
else
{
CloseHandle(hFile); // 关闭文件
return False;
}
}
5.
雪中送炭--BCB函数库1.1
http://zydlm.wxhc.com.cn/down_view.asp?id=119
这里边有这几个函数的详细用法和实例。
就是FindFirst,FileTime的转换什么的。
giboer
2004-06-30
打赏
举报
回复
衷心的感谢各位,感谢csdn, 这张帖子让我学到了许多。结帖。
giboer
2004-06-30
打赏
举报
回复
另一种方法: 可以解决问题, 不过因为使用GetFileTime,所以最后访问时间始终是当前时间。
BOOL MyGetFileTime(AnsiString FileName, int type,SYSTEMTIME &stime)
{
HANDLE hFile = CreateFile (FileName.c_str(), GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE,
NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILETIME lpCreationTime; // 创建时间
FILETIME lpLastAccessTime; // 最近访问时间
FILETIME lpLastWriteTime; // 最近修改时间
if (GetFileTime(hFile, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime))
{
FILETIME ftime;
switch(type)
{
case 0: FileTimeToLocalFileTime(&lpCreationTime, &ftime); break;
case 1: FileTimeToLocalFileTime(&lpLastAccessTime, &ftime); break;
case 2: FileTimeToLocalFileTime(&lpLastWriteTime, &ftime); break;
default:
CloseHandle(hFile); // 关闭文件
return False;
}
FileTimeToSystemTime(&ftime, &stime); // 转换成系统时间格式
CloseHandle(hFile); // 关闭文件
return True;
}
else
{
CloseHandle(hFile); // 关闭文件
return False;
}
}
调用:
SYSTEMTIME sTime;
if(MyGetFileTime(Edit1->Text,0,sTime))
Edit2->Text = SystemTimeToDateTime(sTime);
crysword
2004-06-30
打赏
举报
回复
所以我这里没有使用lpsystemtime类型而使用了systemtime类型。
Maconel
2004-06-30
打赏
举报
回复
雪中送炭--BCB函数库1.1
http://zydlm.wxhc.com.cn/down_view.asp?id=119
这里边有这几个函数的详细用法和实例。
就是FindFirst,FileTime的转换什么的。
giboer
2004-06-30
打赏
举报
回复
TSearchRec sr;
int iAttributes = 0;
LPSYSTEMTIME lpSystemTime;
if (FindFirst("c:\\devcon.exe", iAttributes, sr) == 0)
{
FILETIME t1= sr.FindData.ftCreationTime;
FileTimeToSystemTime(&t1,lpSystemTime); //语句1
Edit1->Text = SystemTimeToDateTime(*lpSystemTime);
FindClose(sr);
}
这样转换后会报非法访问错,好像是因为语句1访问了sr结构?
crysword
2004-06-30
打赏
举报
回复
大概是这样转换的。
TSearchRec sr;
int iAttributes = 0;
SYSTEMTIME lpSystemTime;
if (FindFirst("c:\\pppp.vsd", iAttributes, sr) == 0)
{
FileTimeToSystemTime(&sr.FindData.ftCreationTime,&lpSystemTime);
FindClose(sr);
}
Edit1->Text = SystemTimeToDateTime(lpSystemTime);
giboer
2004-06-30
打赏
举报
回复
TSearchRec sr;
int iAttributes = 0;
LPSYSTEMTIME lpSystemTime;
if (FindFirst("c:\\test.exe", iAttributes, sr) == 0)
{
FileTimeToSystemTime(sr.FindData.ftCreationTime,lpSystemTime);
FindClose(sr);
}
对类型转换不大熟悉,在FileTimeToSystemTime中要求参数为CONST FILETIME 类型 ,而能得到的是FILETIME类型, 怎样转换呢?
giboer
2004-06-29
打赏
举报
回复
谢3996996,试试先。
jone7319:我用FileAge不成功啊。
方法如下: sTimeString = FileDateToDateTime(FileAge(FileName)).TimeString();返回的是修改日期。你成功了不?
jone7319
2004-06-29
打赏
举报
回复
用FileAge()
3996906
2004-06-29
打赏
举报
回复
用FileFirst()找出一个下面结构体的信息来,文件相关的信息要什么有什么
struct TSearchRec
{
int Time;
int Size;
int Attr;
AnsiString Name;
int ExcludeAttr;
int FindHandle;
_WIN32_FIND_DATAA FindData;
void * FindHandle;
char[4097] FindData;
char[257] Pattern;
} ;
crysword
2004-06-29
打赏
举报
回复
FindFirst("文件路径",0,sr)
得到的sr就是以后再说说的结构体
giboer
2004-06-29
打赏
举报
回复
其实(以后再说)的方法,我不太明白的,能不能详细指教一下呢?
kingcaiyao
2004-06-29
打赏
举报
回复
用API函数GetFileTime
futulove
2004-06-29
打赏
举报
回复
一楼的是个好方法
Android自定义
日期
选择器源码
配套博客地址:http://blog.csdn.net/wwj_748/article/details/38778631
指定两个
日期
, 计算相隔的天数
指定两个
日期
, 计算相隔的天数
Project2013手册
帮助您在最快的时间内学会Project2013
网页向女友告白和纪念日专用特效
网页向女友告白和纪念日专用特效 源码下载 来自于屌丝程序员的爱情表白程序,表白,是一个非常神圣的事情,怎么才能成功呢?屌丝不会什么浪漫,只能写一个程序来表达。
python
获取
文件
的
创建
日期
python
获取
文件
日期
,并删除4天外的
文件
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章