转载自 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. 分布式爬虫搭建系列 之二-----神器PyCharm的安装

    这里我们使用PyCharm作为开发工具,以下过程摘抄于:http://blog.csdn.net/qq_29883591/article/details/52664478  作者:陌上行走 Pytho ...

  2. Python中特殊函数和表达式 filter,map,reduce,lambda

    1. filter 官方解释:filter(function or None, sequence) -> list, tuple, or string Return those items of ...

  3. javascript第三节

    面向对象的程序设计 1.属性类型 ECMAScript中有两种属性:数据属性和访问器属性 数据属性: configurable设置为false,表示不能从对象中删除属性. 访问器属性: 支持定义多个属 ...

  4. C#递归所以部门展示到TreeView

    C#递归所以部门展示到TreeView 1.首先是数据库表的设计 新建一张部门表:TestUser表 1.ID自增int主键 2.DeptName:nchar(10)3.DeptCode:nchar( ...

  5. Hadoop Serialization -- hadoop序列化详解 (3)【ObjectWritable,集合Writable以及自定义的Writable】

    前瞻:本文介绍ObjectWritable,集合Writable以及自定义的Writable TextPair 回顾: 前面了解到hadoop本身支持java的基本类型的序列化,并且提供相应的包装实现 ...

  6. Android Architecture Components

    https://developer.android.com/topic/libraries/architecture/index.html ViewModel 有LiveData Activity 监 ...

  7. sql server2008 跨服务器之间复制表数据

    首先2个数据库要能互相访问,在本地数据库用 select * into 新表 from opendatasource('SQLOLEDB','Data Source=远程数据库IP;User ID=用 ...

  8. Asp.net 动态添加Meta标签

    下面代码动态设置浏览器文档模式 HtmlHead head = (HtmlHead)Page.Header; HtmlMeta contentType = new HtmlMeta();//显示字符集 ...

  9. SolrCloud中的文件与Collection管理

    转载请出自出处:http://eksliang.iteye.com/blog/2124078 http://eksliang.iteye.com/ 一.内嵌启动SolrCloud时端口默认分配 当 S ...

  10. 第01章 开发准备(对最新版的RN进行了升级)1-2+项目技术分解