转载自 http://www.cnblogs.com/jieke/archive/2013/01/11/2855782.html

本文介绍了在Delphi中利用系统函数和Windows API函数调用来获取和修改文件的时间信息的方法。

熟悉Windows 95/98的朋友一定经常会用单击鼠标右键的方法来查看所选定的文件的属性信息。在属性菜单中会列

出该文件的创建时间、修改时间和访问时间。这些信息常常是很有用的,它们的设置一般都是由操作系统(也就

是由Dos/Windows等等)自动完成的,不会让用户轻易修改。

这里,我向大家介绍在Delphi中如何实现文件时间的获取和修改方法。Delphi中提供了很完备的Windows API函数

的调用接口,可以方便的进行高级Windows编程。利用Delphi中的FindFirst函数可以得到一个文件的属性记录,

该记录中的FindData域中就记载了详细的文件时间信息。然而遗憾的是,FindData中的时间信息是不能直接得到

的。因此,有人(编者按:很遗憾不知此人姓名)编写了一个转换函数来完成文件时间格式的转换。下面给出了

具体的实现方法,仅供参考: 
function CovFileDate(Fd:_FileTime):TDateTime; 
{ 转换文件的时间格式 } 
var 
Tct:_SystemTime; 
Temp:_FileTime; 
begin 
FileTimeToLocalFileTime(Fd,Temp); 
FileTimeToSystemTime(Temp,Tct); 
CovFileDate:=SystemTimeToDateTime(Tct); 
end; 
有了上面的函数支持,我们就可以获取一个文件的时间信息了。以下是一个简单的例子: 
procdeure GetFileTime(const Tf:string); 
{ 获取文件时间,Tf表示目标文件路径和名称 } 
const 
Model=yyyy/mm/dd,hh:mm:ss; { 设定时间格式 } 
var 
Tp:TSearchRec; { 申明Tp为一个查找记录 } 
T1,T2,T3:string; 
begin 
FindFirst(Tf,faAnyFile,Tp); { 查找目标文件 } T1:=FormatDateTime(Model, 
CovFileDate(Tp.FindData.ftCreationTime))); 
{ 返回文件的创建时间 } 
T2:=FormatDateTime(Model, 
CovFileDate(Tp.FindData.ftLastWriteTime))); 
{ 返回文件的修改时间 } 
T3:=FormatDateTime(Model,Now)); 
{ 返回文件的当前访问时间 } 
FindClose(Tp); 
end; 
设置文件的时间要复杂一些,这里介绍利用Delphi中的DataTimePicker组件来辅助完成这一复杂的操作。下面的

例子利用了四个DataTimePicker组件来完成文件创建时间和修改时间的设置。注意:文件的访问时间用修改时间

来代替。使用下面的例子时,请在您的Form上添加四个DataTimePicker组件。其中第一和第三个DataTimePicker

组件中的Kind设置为dtkDate,第二个和第四个DataTimePicker组件中的Kind设置为dtkTime. 
procedure SetFileDateTime(const Tf:string); 
{ 设置文件时间,Tf表示目标文件路径和名称 } 
var 
Dt1,Dt2:Integer; 
Fs:TFileStream; 
Fct,Flt:TFileTime; 
begin 
Dt1:=DateTimeToFileDate( 
Trunc(Form1.DateTimePicker1.Date) + Frac(Form1.DateTimePicker2.Time)); 
Dt2:=DateTimeToFileDate( 
Trunc(Form1.DateTimePicker3.Date) + Frac(Form1.DateTimePicker4.Time)); 
{ 转换用户输入在DataTimePicker中的信息 } 
try 
FS := TFileStream.Create(Tf, fmOpenReadWrite); 
try 
if DosDateTimeToFileTime(LongRec(DT1).Hi, LongRec(DT1).Lo, Fct) and 
LocalFileTimeToFileTime(Fct, Fct) and 
DosDateTimeToFileTime(LongRec(DT2).Hi, LongRec(DT2).Lo, Flt) and 
LocalFileTimeToFileTime(Flt, Flt) 
then SetFileTime(FS.Handle, 
@Fct, @Flt, @Flt); 
{ 设置文件时间属性 } 
finally 
FS.Free; 
end; 
except 
MessageDlg(日期修改操作失败!, 
mtError, [mbOk], 0); 
{ 因为目标文件正在被使用等原因而导致失败 } 
end; 
end; 
以上简单介绍了文件时间属性的修改方法,请注意:修改文件时间的范围是从公元1792年9月19日开始的,上限可

以达到公元2999年或更高。另外,请不要将此技术用于破坏他人文件等非正当途径.

API版本:

function GetFileTime(sFileName:string;TimeType:Integer):TDateTime; 
var 
ffd:TWin32FindData; 
dft:DWord; 
lft,Time:TFileTime; 
H:THandle; 
begin 
H:=Windows.FindFirstFile(PChar(sFileName),ffd); 
//找到文件sFileName并填充其TWin32FindData类 
if(H<>INVALID_HANDLE_VALUE)then 
//文件找到,根据TimeType返回相应时间信息 
begin 
case TimeType of 
0:Time:=ffd.ftCreationTime; 
1:Time:=ffd.ftLastWriteTime; 
2:Time:=ffd.ftLastAccessTime; 
end; 
Windows.FindClose(H);

//由于只查找一个文件,所以关掉句柄H 
FileTimeToLocalFileTime(Time,lft); 
//转换FILETIME格式成为localFILETIME格式 
FileTimeToDosDateTime(time,LongRec(dft).Hi,LongRec(dft).Lo); 
//转换FILETIME格式成为DOStime格式 
Result:=FileDateToDateTime(dft); 
//最后,转换DOStime格式成为Delphi的TdateTime格式 
end 
else 
//没找到文件返回0 
result:=0; 
end;

在Delphi中获取和修改文件的时间的更多相关文章

  1. (转载)delphi中获取汉字的拼音首字母

    delphi中获取汉字的拼音首字母1.py: array[216..247] of string = ({216}'CJWGNSPGCGNESYPB' + 'TYYZDXYKYGTDJNMJ' + ' ...

  2. C#获取并修改文件扩展名的方法

    本文实例讲述了C#获取并修改文件扩展名的方法.分享给大家供大家参考.具体分析如下: 这里使用C#编程的方法改变文件扩展名的文件,必须使用Path类. Path类用来解析文件系统路径的各个部分.静态方法 ...

  3. touch - 修改文件的时间戳记.

    总览 touch [-acm][-r ref_file(参照文件)|-t time(时间值)] file(文件名)... 被废弃的版本: touch [-acm][ugly_time] file(文件 ...

  4. Qt下如何修改文件的时间(全平台修改)

    提供一个全平台修改文件的时间的方法,希望大家喜欢 /* UTIME.C: This program uses _utime to set the * file-modification time to ...

  5. 在Delphi中使用系统对应文件类型的图标

    在应用程序的编写中,组合框(ComboBox).列表框(ListBox).等常见的部件,通常不仅要用于显示文字,而且还要显示其与文字相关的图标.在一般的Windows应用程序中,这些图标的显示都要随列 ...

  6. Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)

    uses DateUtils;DateTimeToUnix(Now) 可以转换到unix时间,但是注意的是,它得到的时间比c语言中time()得到的时间大了8*60*60这是因为Now是当前时区的时间 ...

  7. fcntl获取和修改文件打开状态标志

    [root@bogon code]# cat b.c #include<stdio.h> #include<error.h> #include<unistd.h> ...

  8. linux 修改文件的时间属性

    二.修改文件时间 创建文件我们可以通过touch来创建.同样,我们也可以使用touch来修改文件时间.touch的相关参数如下: -a : 仅修改access time. -c : 仅修改时间,而不建 ...

  9. 从URI中获取实际的文件path

    如题,经常用在onActivityResult方法中解析图片等各种地址,因为Android 4.4之后google更改了对应的方法. /** * Get a file path from a Uri. ...

随机推荐

  1. Python中常用模块一

    random模块 import random # 应用数学计算 print(random.random()) # 取随机小数 范围是 0-1之间 # 应用抽奖 , 彩票 print(random.ra ...

  2. leetcode888

    class Solution { public: int Binary_Search(vector<int> x, int N, int keyword) { , high = N - , ...

  3. 设置VMware Player中的虚拟机和宿主机共享文件

    设置VMware Player中的虚拟机和宿主机共享文件 试验环境: 虚拟机软件:VMware Player 6.0.3 宿主机os:windows7 虚拟机os:centos6.6(32位)   完 ...

  4. 服务器发送邮件出现Could not connect to SMTP host错误 解决办法

    服务器发送邮件出现Could not connect to SMTP host错误 解决办法 功夫不负有心人,最后了解到,除了google的smtp服务器收到请求“smtp”会接受,其他服务器比如qq ...

  5. 局域网内的一些计算机可以ping通 有些ping不同

    如何查看.添加.修改.删除电脑内部路由_百度经验https://jingyan.baidu.com/article/77b8dc7fc611626174eab6cb.html

  6. Linux GCC编译警告:Clock skew detected. 错误解决办法

    今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误: make: warning: Clock skew detected. Your build may be incomplete 试了ma ...

  7. Win10 pip安装pycocotools报错解决方法(cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”)

    参考: https://blog.csdn.net/chixia1785/article/details/80040172 https://blog.csdn.net/gxiaoyaya/articl ...

  8. python gridsearchcv 里的评价准则

    http://scikit-learn.org/stable/modules/model_evaluation.html 3.3.1. The scoring parameter: defining ...

  9. Python3 常用爬虫库的安装

    Python3 常用爬虫库的安装 1 简介 Windows下安装Python3常用的爬虫库:requests.selenium.beautifulsoup4.pyquery.pymysql.pymon ...

  10. hdu 4279 Number(G++提交)

    打表找规律: #include<stdio.h> #include<math.h> #define N 250 bool judge(int i,int j) { ;k< ...