★★★狂急!请问怎样取得文件的创建日期!在线等!在线结贴!★★★ 请说明具体方法,不要只列一个api函数!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 引用FileCtrl单元FileDateToDateTime(FileAge('c:\text.txt'))//返回日期型数据 利用Delphi中的FindFirst函数可以得到一个文件的属性记录,该记录中的FindData域中就记载了详细的文件时间信息。 FileGetDate可以取到文件修改日期,但是取不到创建日期 To: lincanwen(密码错误) 这样只能得到文件的修改时间!得不到文件的创建时间啊?????? 靠,CreateFile运行的时候出错,因此希望哪位帮帮看。关键是使用Api函数:GetFileTimevar hFile: THandle; lpCreationTime, lpLastAccessTime, lpLastWriteTime: PFileTime; SystemTime: TSystemTime; year,month,day,Hour,Minute,Second: Word; lpSecurityAttributes: PSecurityAttributes;begin New(lpCreationTime); New(lpLastAccessTime); New(lpLastWriteTime); New(lpSecurityAttributes); hFile:=CreateFile(Pchar('d:\test.txt'),GENERIC_READ,0,lpSecurityAttributes,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if hFile=INVALID_HANDLE_VALUE then exit; if GetFileTime(hFile,lpCreationTime, lpLastAccessTime, lpLastWriteTime) then if FileTimeToSystemTime(lpCreationTime^,SystemTime) then begin Year:=SystemTime.wYear; Month:=SystemTime.wMonth; Day:=SystemTime.wDay; Hour:=SystemTime.wHour; Minute:=SystemTime.wMinute; Second:=SystemTime.wSecond; Label1.Caption:=Format('%4d-%2d-%2d %2d:%2d:%2d',[Year,month,Day,Hour,Minute,Second]); end; CloseHandle(hFile); Dispose(lpCreationTime); Dispose(lpLastAccessTime); Dispose(lpLastWriteTime); Dispose(lpSecurityAttributes); procedure TForm1.Button1Click(Sender: TObject);var hwndFile, FileCreateDate: Integer; FileTime, LocalFileTime: TFileTime;begin hwndFile := FileOpen('d:\bag.exe', fmOpenRead); GetFileTime(THandle(hwndFile), @FileTime, nil, nil); FileTimeToLocalFileTime(FileTime, LocalFileTime); FileTimeToDosDateTime(LocalFileTime, LongRec(FileCreateDate).Hi, LongRec(FileCreateDate).Lo); ShowMessage(DateTimeToStr(FileDateToDateTime(FileCreateDate))); FileClose(hwndFile);end; To :larruping(且夫水之积也不厚,则其负大舟也无力) 好像不能运行阿? to StarDnaFox(蓝精灵) 什么出错信息,在我这里可以啊! 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; //获取文件的时间信息const FILE_CREATE_TIME = 0; //文件建立时间 FILE_MODIFY_TIME = 1; //修改时间 FILE_ACCESS_TIME = 2; //最后访问时间,不过好像总是当前时间?function GetFileTimeInfo(vFileName: String; uFlag: Byte = FILE_ACCESS_TIME): TDateTime;var wFindData : TWin32FindData; dFileTime : dWord; fFileTime : TFileTime; vHandle : THandle;begin vHandle := FindFirstFile(pChar(vFileName), wFindData); if vHandle <> INVALID_HANDLE_VALUE then begin case uFlag of FILE_CREATE_TIME: FileTimeToLocalFileTime(wFindData.ftCreationTime, fFileTime); FILE_MODIFY_TIME: FileTimeToLocalFileTime(wFindData.ftLastWriteTime, fFileTime); FILE_ACCESS_TIME: FileTimeToLocalFileTime(wFindData.ftLastAccessTime, fFileTime); else FileTimeToLocalFileTime(wFindData.ftLastAccessTime, fFileTime); end; FileTimeToDosDateTime(fFileTime, LongRec(dFileTime).Hi, LongRec(dFileTime).Lo); Result := FileDateToDateTime(dFileTime); Windows.FindClose(vHandle); end else Result := 0;end; function CovFileDate(Fd:_FileTime):TDateTime;{ 转换文件的时间格式 }var Tct:_SystemTime; Temp:_FileTime;begin FileTimeToLocalFileTime(Fd,Temp); FileTimeToSystemTime(Temp,Tct); CovFileDate:=SystemTimeToDateTime(Tct);end;function GetFileTime(const Tf:string):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); result:=T1end; 为什么我的圆角 有齿? ---------------[图] Delphi有搞头吗? 急,关于向串口发送二进制数据的问题? TLookupComboBox组件的简单问题 关于TScrollBox和TPanel的问题! 高分,问题解决立即给分!!!!! 急急!!!!!!!!!!!!! 为什么这段程序无法把相应的信息保存到数据库啊? HI这个函数常用吗? 本版建设的重大提议 DELPHI请教 为什么会出错? 类引用和定义子类的区别。
FileDateToDateTime(FileAge('c:\text.txt'))//返回日期型数据
域中就记载了详细的文件时间信息。 FileGetDate可以取到文件修改日期,但是取不到创建日期
这样只能得到文件的修改时间!
得不到文件的创建时间啊??????
关键是使用Api函数:GetFileTime
var
hFile: THandle;
lpCreationTime, lpLastAccessTime, lpLastWriteTime: PFileTime;
SystemTime: TSystemTime;
year,month,day,Hour,Minute,Second: Word;
lpSecurityAttributes: PSecurityAttributes;
begin
New(lpCreationTime);
New(lpLastAccessTime);
New(lpLastWriteTime);
New(lpSecurityAttributes); hFile:=CreateFile(Pchar('d:\test.txt'),GENERIC_READ,0,lpSecurityAttributes,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if hFile=INVALID_HANDLE_VALUE then exit;
if GetFileTime(hFile,lpCreationTime, lpLastAccessTime, lpLastWriteTime) then
if FileTimeToSystemTime(lpCreationTime^,SystemTime) then
begin
Year:=SystemTime.wYear;
Month:=SystemTime.wMonth;
Day:=SystemTime.wDay;
Hour:=SystemTime.wHour;
Minute:=SystemTime.wMinute;
Second:=SystemTime.wSecond;
Label1.Caption:=Format('%4d-%2d-%2d %2d:%2d:%2d',[Year,month,Day,Hour,Minute,Second]);
end;
CloseHandle(hFile); Dispose(lpCreationTime);
Dispose(lpLastAccessTime);
Dispose(lpLastWriteTime);
Dispose(lpSecurityAttributes);
var
hwndFile, FileCreateDate: Integer;
FileTime, LocalFileTime: TFileTime;
begin
hwndFile := FileOpen('d:\bag.exe', fmOpenRead);
GetFileTime(THandle(hwndFile), @FileTime, nil, nil);
FileTimeToLocalFileTime(FileTime, LocalFileTime);
FileTimeToDosDateTime(LocalFileTime, LongRec(FileCreateDate).Hi, LongRec(FileCreateDate).Lo);
ShowMessage(DateTimeToStr(FileDateToDateTime(FileCreateDate)));
FileClose(hwndFile);
end;
好像不能运行阿?
什么出错信息,在我这里可以啊!
{ 获取文件时间,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;
FILE_CREATE_TIME = 0; //文件建立时间
FILE_MODIFY_TIME = 1; //修改时间
FILE_ACCESS_TIME = 2; //最后访问时间,不过好像总是当前时间?function GetFileTimeInfo(vFileName: String; uFlag: Byte = FILE_ACCESS_TIME): TDateTime;
var
wFindData : TWin32FindData;
dFileTime : dWord;
fFileTime : TFileTime;
vHandle : THandle;
begin
vHandle := FindFirstFile(pChar(vFileName), wFindData);
if vHandle <> INVALID_HANDLE_VALUE then
begin
case uFlag of
FILE_CREATE_TIME: FileTimeToLocalFileTime(wFindData.ftCreationTime, fFileTime);
FILE_MODIFY_TIME: FileTimeToLocalFileTime(wFindData.ftLastWriteTime, fFileTime);
FILE_ACCESS_TIME: FileTimeToLocalFileTime(wFindData.ftLastAccessTime, fFileTime);
else
FileTimeToLocalFileTime(wFindData.ftLastAccessTime, fFileTime);
end;
FileTimeToDosDateTime(fFileTime, LongRec(dFileTime).Hi, LongRec(dFileTime).Lo);
Result := FileDateToDateTime(dFileTime);
Windows.FindClose(vHandle);
end
else
Result := 0;
end;
{ 转换文件的时间格式 }
var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;function GetFileTime(const Tf:string):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);
result:=T1
end;