unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShlObj,StrUtils, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    btn2: TButton;
    ListBox1: TListBox;
    btn3: TButton;
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    DateTimePicker3: TDateTimePicker;
    DateTimePicker4: TDateTimePicker;
    btn4: TButton;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);


    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation
function SelectFolderDialog(const Handle: integer; const Caption: string;
const InitFolder: WideString; var SelectedFolder: string): boolean;
var
BInfo: _browseinfo;
Buffer: array[0..MAX_PATH] of Char;
ID: IShellFolder;
Eaten, Attribute: Cardinal;
ItemID: PItemidlist;
begin
Result := False;
BInfo.HwndOwner := Handle;
BInfo.lpfn := nil;
BInfo.lpszTitle := Pchar(Caption);
BInfo.ulFlags := BIF_RETURNONLYFSDIRS + BIF_NEWDIALOGSTYLE;
SHGetDesktopFolder(ID);
ID.ParseDisplayName(0, nil, PWideChar(InitFolder), Eaten, ItemID, Attribute);
BInfo.pidlRoot := ItemID;
GetMem(BInfo.pszDisplayName, MAX_PATH);
try
    if SHGetPathFromIDList(SHBrowseForFolder(BInfo), Buffer) then
    begin
      SelectedFolder := Buffer;
      if Length(SelectedFolder) <> 3 then
        SelectedFolder := SelectedFolder + '\';
      result := True;
    end
    else
    begin
      SelectedFolder := '';
      Result := False;
    end;
finally
    FreeMem(BInfo.pszDisplayName);
end;
end;
function   SearchFile(mainpath:string;filename:string;   var   foundresult:TStrings):Boolean;
function   IsValidDir(SearchRec:TSearchRec):Boolean;
begin
if   (SearchRec.Attr=16)   and
(SearchRec.Name <> '. ')   and
(SearchRec.Name <> '.. ')   then
Result:=True
else
Result:=False;
end;
var
i:integer;
Found:Boolean;
subdir1:TStrings;
searchRec:TsearchRec;
begin
    if   copy(mainpath,length(mainpath),1) <> '\ '   then   mainpath:=mainpath+ '\ ';
    found:=false;
    if   Trim(filename) <> ' '   then
    begin
        subdir1:=TStringList.Create;
        if   (FindFirst(mainpath+ '*.* ',   faDirectory,SearchRec)=0)   then
        begin
            if   IsValidDir(SearchRec)   then   subdir1.Add(SearchRec.Name);
            while   (FindNext(SearchRec)   =   0)   do
            begin
                if   IsValidDir(SearchRec)   then   subdir1.Add(SearchRec.Name);
            end;
    end;
    FindClose(SearchRec);
    //查找当前目录。
    if   (FindFirst(mainpath+ '*.* ',   faAnyFile-faDirectory,   SearchRec)=0)     then
    begin
        foundresult.Add(mainpath+SearchRec.Name);
        while   (FindNext(SearchRec)   =   0)   do
        begin
            foundresult.Add(mainpath+SearchRec.Name);
        end;
    end;
    FindClose(SearchRec);
    for   i:=0   to   subdir1.Count-1   do
        found:=Searchfile(mainpath+subdir1.Strings[i]+
'\ ',Filename,foundresult)or   found;
    subdir1.Free;
    end;
    result:=found;
end;

function MakeFileList(Path,FileExt:string):TStringList ;
var
sch:TSearchrec;
begin
Result:=TStringlist.Create;

if rightStr(trim(Path), 1) <> '\' then
    Path := trim(Path) + '\'
else
    Path := trim(Path);

if not DirectoryExists(Path) then
begin
    Result.Clear;
    exit;
end;

if FindFirst(Path + '*', faAnyfile, sch) = 0 then
begin
    repeat
       Application.ProcessMessages;
       if ((sch.Name = '.') or (sch.Name = '..')) then Continue;
       if DirectoryExists(Path+sch.Name) then   // 这个地方加上一个判断,可以区别子文件夹河当前文件夹的操作
       begin
         Result.AddStrings(MakeFileList(Path+sch.Name,FileExt));
       end
       else
       begin
         if (UpperCase(extractfileext(Path+sch.Name)) = UpperCase(FileExt)) or (FileExt='.*') then
         Result.Add(Path+sch.Name);
       end;
    until FindNext(sch) <> 0;
    SysUtils.FindClose(sch);
end;
end;
procedure ModifyFileDate(const ASourceFile:string);
var
LSourceStream: TFileStream;
FT   :   FILETIME;
ST   :   SYSTEMTIME;
begin
LSourceStream := TFileStream.Create(ASourceFile, fmOpenReadWrite);
try
    FileTimeToSystemTime(FT,ST);
    ST.wYear :=2009;
    ST.wMonth :=5;
    ST.wDay :=10;
    SystemTimeToFileTime(ST,FT);
    SetFileTime(LSourceStream.Handle,@FT,@FT,@FT);
finally
    FreeAndNil(LSourceStream);
end;
end;

function CovFileDate(Fd:_FileTime):TDateTime;   // 转换文件的时间格式

var
Tct:_SystemTime;
Temp:_FileTime;
begin
FileTimeToLocalFileTime(Fd,Temp);
FileTimeToSystemTime(Temp,Tct);
CovFileDate:=SystemTimeToDateTime(Tct);
end;
procedure SetFileDateTime(const Tf:string);   //设置文件时间,输入值表示目标文件的路径
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中的信息,Form1.DateTimePicker1.Date和Form1.DateTimePicker2.Time就是创建时间,Form1.DateTimePicker3.Date和Form1.DateTimePicker4.Time就是修改时间
try
FS := TFileStream.Create(Tf, fmOpenReadWrite);    //创建TFileStream
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;
MessageDlg('修改成功',mtconfirmation, [mbOk], 0);     //提示成功
except
MessageDlg('修改失败',mtError, [mbOk], 0);   //因为目标文件正在被使用等原因而导致失败
end;
end;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var
NewDir: string;


begin
if SelectFolderDialog(Handle, '选择', '', NewDir) then
label1.Caption:=NewDir;

    end;


procedure TForm1.btn2Click(Sender: TObject);
begin
ListBox1.Items:= MakeFileList(Label1.Caption ,'.*');
end;

procedure TForm1.btn3Click(Sender: TObject);
var i:integer;
begin
for i:=0 to listbox1.Items.Count-1 do

    ModifyFileDate (ListBox1.Items[i]);
end;

procedure TForm1.btn4Click(Sender: TObject);
var i:integer;
begin

for i:=0 to listbox1.Items.Count-1 do
if ListBox1.Selected[i] then
begin
   SetFileDateTime (ListBox1.Items[i]);
   end;
end;

end.

但是能分别显示日期和时间,就是说要用两个datetimepicker来实现
一个设置kind属性为dtkdate,另外一个设置kind属性为dtkTime,就行了。

文章来源:非常夏日 毕业设计 论文定做 免费论文  

            找吧!毕业设计 毕业设计 毕业论文 论文定做 免费论文

posted on 2010-11-30 20:59  非常夏日毕业设计  阅读(386)  评论(0)    收藏  举报