在Delphi中获取和修改文件的时间

原创 2004年09月17日 10:32:00
在Delphi中获取和修改文件的时间

  本文介绍了在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年或更高。另外,请不要将此技术用于破坏他人文件等非正当途径。

DELPHI获得系统当前时间日期和格式化时间

获得系统当前时间     本例中主要应用了FormatDateTime函数,此函数主要用于将日期时间格式化为指定的字符串。利用该函数可以输出许多形式的时间格式。     程序运行结果如图6...
  • wozengcong
  • wozengcong
  • 2015年04月05日 12:22
  • 7112

Windows 获取文件操作时间的方法

一、获取文件的修改时间 /* typedef struct _WIN32_FIND_DATAA {     DWORD dwFileAttributes;     FILETIME ftCreatio...
  • rivendless
  • rivendless
  • 2015年12月11日 18:21
  • 635

获取文件创建时间、最后修改时间、访问时间

//获取文件属性创建时间、访问时间 和 修改时间 //这里的CreateFile只导致文件只能被只读打开,不能有其他权限,最好用FindFile获取创建,修改和访问时间 void get_file_c...
  • qingzai_
  • qingzai_
  • 2015年08月19日 15:44
  • 1863

Android 扫描音乐文件、两种方式获取文件最新修改时间

package com.example.demo_mediascanner; import java.io.File; import java.util.Calendar; import java....
  • u013372185
  • u013372185
  • 2014年12月01日 09:42
  • 2540

python文件夹遍历,文件操作,获取文件修改创建时间

在Python中,文件操作主要来自os模块,主要方法如下: os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前工作目录 os.curd...
  • w122079514
  • w122079514
  • 2013年11月21日 17:58
  • 30057

C++ 如何获取目录下面的文件/文件的创建时间

http://www.cnblogs.com/king_astar/archive/2009/09/27/1575107.html 我手上有一个C++程序会生成一些临时文件,过期以后希望能够删除....
  • chenyijun
  • chenyijun
  • 2016年09月09日 10:35
  • 1583

Delphi 常用日期与时间函数

1 获取特定的日期与时间 本小节将为您介绍Delphi 所提供的获取特定日期与时间的函数.这些函数稍后将有详细的范例说明.笔者这里将以列表的方式先说明每一个函数所代表的意义,如图示: 函数名称 单元文...
  • wozengcong
  • wozengcong
  • 2013年09月10日 12:04
  • 2216

linux下文件的创建时间、访问时间、修改时间和改变时间

原文地址::http://blog.csdn.net/zyz511919766/article/details/14452027 确切的说不存在创建时间。若文件从创建后不曾修改过...
  • xqhrs232
  • xqhrs232
  • 2017年02月15日 13:52
  • 477

Linux下用C语言显示文件夹下所有文件的名称、大小、最后修改时间

为了实现Linux下ls的功能 逐步完成各项功能 递归显示文件夹与子文件下文件名称#include #include #include #include #include int rea...
  • u013007900
  • u013007900
  • 2016年03月30日 11:00
  • 2236

在Delphi中编辑res文件

先用记事本编写一个rc的文件。如内容为: _Comms RCData Comms.jpg Comms.jpg为图片名称, 然后在这个rc文件和图片拷贝到delphi安装路径的bin文件夹里面...
  • zang141588761
  • zang141588761
  • 2016年09月19日 15:11
  • 1156
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Delphi中获取和修改文件的时间
举报原因:
原因补充:

(最多只允许输入30个字)