//以下代码将某目录下jpg文件找出并按时间顺序存入 slfile
unit UntMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DateUtils, Types;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
function SearchFiles(sDir: String):boolean; //在指定目录下查找文件
procedure AccordDateSort(sDir: String); //根据时间排序文件
// 取文件时间
function GetFileDate(const FileName: string; var CreationTime, LastWriteTime, LastAccessTime:
TFileTime): Boolean;
function GetFileModifyTime(const strFileName: string): TDateTime; //获得文件的修改时间
function CovFileDate(Fd: _FileTime): TDateTime; // 转换文件的时间格式
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
slFile : TStringList; //所有的指定后缀名的文件
const
_DirName : string = 'C:/Documents and Settings/fenian/桌面/SaveJpg';
_Ext : string = '.jpg'; //需要处理的文件的后缀名
implementation
uses UntPub;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
sDir: string;
begin
sDir := ExcludeTrailingPathDelimiter(_DirName);
sDir := sDir + '/';
if not DirectoryExists(_DirName) then //目录不存在
begin
MsgDlgInfo(Application.Handle,_DirName+' 不存在!');
Exit;
end;
if not SearchFiles(_DirName) then
begin
MsgDlgInfo(Application.Handle,'不存在指定的文件!');
Exit;
end;
AccordDateSort(_DirName);
for i:=0 to slFile.Count-1 do
showmessage(sDir+slFile.Strings);
end;
function TForm1.SearchFiles(sDir: String): boolean;
var
SearchRec : TSearchRec;
sCurDir:String;
begin
sDir := ExcludeTrailingPathDelimiter(sDir);
sDir := sDir + '/';
sCurDir:=GetCurrentDir;
try
SetCurrentDir(sDir); //设置当前目录
slFile.Clear;
if FindFirst(sDir+'*'+_Ext, faAnyFile, SearchRec)<>0 then
begin
Result := false;
exit;
end;
if (SearchRec.Attr and faDirectory)=0 then
slFile.Add(SearchRec.Name);
while FindNext(SearchRec) = 0 do
begin
if (SearchRec.Attr and faDirectory)=0 then
slFile.Add(SearchRec.Name);
end;
Result := true;
FindClose(SearchRec);
finally
ChDir(sCurDir);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
slFile := TStringList.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
slFile.Free;
end;
procedure TForm1.AccordDateSort(sDir: String); //从早到晚排列
var
i,j: integer;
sTmp: String;
lpCreationTime,lpLastAccessTime,lpLastWriteTime: TFILETIME;
begin
sDir := ExcludeTrailingPathDelimiter(sDir);
sDir := sDir + '/';
for i:=0 to slFile.Count-2 do //冒泡
begin
for j:=0 to slFile.Count-2-i do
if CompareDateTime(GetFileModifyTime(sDir+slFile.Strings[j]),
GetFileModifyTime(sDir+slFile.Strings[j+1])) = GreaterThanValue then
begin
sTmp := slFile.Strings[j];
slFile.Strings[j] := slFile.Strings[j+1];
slFile.Strings[j+1] := sTmp;
end;
end;
end;
function TForm1.GetFileDate(const FileName: string; var CreationTime,
LastWriteTime, LastAccessTime: TFileTime): Boolean;
var
FileHandle: Integer;
begin
FileHandle := FileOpen(FileName, fmOpenRead or fmShareDenyNone);
if FileHandle > 0 then
begin
GetFileTime(FileHandle, @CreationTime, @LastAccessTime, @LastWriteTime);
FileClose(FileHandle);
Result := True;
end
else
Result := False;
end;
function TForm1.GetFileModifyTime(const strFileName: string): TDateTime;
var
Tp: TSearchRec; //申明Tp为一个查找记录
begin
FindFirst(strFileName, faAnyFile, Tp); { 查找目标文件 }
FindClose(Tp);
result := CovFileDate(Tp.FindData.ftLastWriteTime); //修改时间
end;
function TForm1.CovFileDate(Fd: _FileTime): TDateTime;
var
Tct: _SystemTime;
Temp: _FileTime;
begin
FileTimeToLocalFileTime(Fd, Temp);
FileTimeToSystemTime(Temp, Tct);
CovFileDate := SystemTimeToDateTime(Tct);
end;
=========================
unit UntPub;
interface
uses
Windows, Forms, Controls;
procedure MsgDlgInfo(const Handle: THandle; const Text: string);
implementation
{弹出提示信息框}
procedure MsgDlgInfo(const Handle: THandle; const Text: string);
begin
MessageBox(Handle, PChar(Text), PChar(Application.Title), MB_OK + MB_ICONINFORMATION + MB_TOPMOST);
end;
end.