序言
昨天把文件的 MD5 获取了,本次获取文件的日期,包括创建时间、修改时间和访问时间,文件的大小和文件存储的绝对路径。在网上找资料测试终于完成这个任务。
路径
GUI仍是一顿拖放,没有设计细胞,只能按照最简单的。布局如下:
文件的绝对路径很容易获取到,可以直接使用 OpenDialog_1.FileName
,FileName 属性获取的就是绝对路径。
时间
创建时间是在本地电脑创建文件的时间,不是第一个创建这个文件的时间。因此创建时间有时候会比访问时间要晚。在 Delphi 中,文件的创建时间、修改时间和访问时间都已经封装好了,可以直接使用。创建时间用的是 ftCreationTime
, 修改时间用的是 ftLastWriteTime
, 访问时间用的是 ftLastAccessTime
。
大小
文件大小在Delphi中的获取方法很多。从我找到的资料看,我知道的有5种,分别是:FileSizeByName, GetFileSize, FileSize, FileSeek 和 TFileStream.Size,具体是使用方法,可以参见下方的代码。
源代码
上文中说到的方法都能在下方看到时如何使用的。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdGlobalProtocols;
type
TForm1 = class(TForm)
Button_1: TButton;
OpenDialog_1: TOpenDialog;
Edit_1: TEdit;
Edit_2: TEdit;
Edit_3: TEdit;
Edit_4: TEdit;
Edit_5: TEdit;
procedure Button_1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function FGetFileTime(sFileName:string;TimeType:Integer):TDateTime;
var
Form1: TForm1;
implementation
{$R *.dfm}
function FGetFileTime(sFileName:string; TimeType:Integer):TDateTime;
var
ffd:TWin32FindData;
dft:DWord;
lft,Time:TFileTime;
H:THandle;
begin
H:= Winapi.Windows.FindFirstFile(PChar(sFileName),ffd);
case TimeType of
0:Time:=ffd.ftCreationTime;
1:Time:=ffd.ftLastWriteTime;
2:Time:=ffd.ftLastAccessTime;
end;
{ 获取文件信息 }
if(H<>INVALID_HANDLE_VALUE)then
begin
{ 只查找一个文件,所以关掉 find }
Winapi.Windows.FindClose(H);
{ 转换 FILETIME 格式成为 localFILETIME 格式 }
FileTimeToLocalFileTime(Time,lft);
{ 转换 FILETIME 格式成为 DOStime 格式 }
FileTimeToDosDateTime(lft,LongRec(dft).Hi,LongRec(dft).Lo);
{ 最后,转换 DOStime 格式成为 Delphi 应用的 TdateTime 格式 }
Result:=FileDateToDateTime(dft);
end
else
result:=0;
end;
procedure TForm1.Button_1Click(Sender: TObject);
var
FileHandle:integer;
f: file;
FS: TFileStream;
begin
if OpenDialog_1.Execute then
Edit_1.Text:= OpenDialog_1.FileName;
Edit_2.Text:= '创建时间: ' + DateToStr(FGetFileTime(Edit_1.Text,0));
Edit_3.Text:= '修改时间: ' + DateToStr(FGetFileTime(Edit_1.Text,1));
Edit_4.Text:= '访问时间: ' + DateToStr(FGetFileTime(Edit_1.Text,2));
{ FileSizeByName 函数需要 IdGlobalProtocols }
Edit_5.Text:= '文件大小: ' + IntToStr(FileSizeByName(OpenDialog_1.Filename)) + ' 字节';
{ GetFileSize 函数获取文件大小 }
// FileHandle := FileOpen(OpenDialog_1.FileName, 0);
// ShowMessage(IntToStr(GetFileSize(FileHandle, nil)));
// FileClose(FileHandle);
{ FileSize 函数获取文件大小 }
// AssignFile(f, OpenDialog_1.FileName);
// Reset(f, 1);
// ShowMessage(IntToStr(FileSize(f)));
// CloseFile(f);
{ FileSeek 函数获取文件大小 }
// FileHandle := FileOpen(OpenDialog_1.FileName, 0);
// ShowMessage(IntToStr(FileSeek(FileHandle,0,2)));
// FileClose(FileHandle);
{ TFileStream.Size 获取文件大小 }
// FS := TFileStream.Create(OpenDialog_1.FileName, fmShareDenyNone);
// ShowMessage(IntToStr(FS.Size));
// FS.Free;
end;
end.
验证结果如下:
目前没法什么问题
结语
小的功能目前都已经实现了,可以尝试吧小功能组合到一块去,完成自己的idea。
如有错误,敬请指出,感谢指正! — 2020-06-07 12:42:02
最新评论
这个软件有bug的,客户端windows有些键不能用如逗号、句号
没有收到邮件通知
我的评论通知貌似坏掉了,定位一下问题
测试一下重新部署后的邮件功能
居然看到自己公司的MIB库,诚惶诚恐
那可能是RobotFramework-ride的版本问题。我装的1.7.4.2,有这个限制。我有空再尝试下旧版本吧,感谢回复。
你好!我在python2.7中安装RobotFramework-ride的时候提示wxPython的版本最高是2.18.12,用pip下载的wxPython版本是4.10,而且我在那个路径下没有找到2
真的太好了,太感谢了,在bilibili和CSDN上都找遍了,终于在你这里找到了