Celebrate National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Date and Time

Posted on 2001-06-25
8
Medium Priority
?
198 Views
Last Modified: 2010-04-06
I want to set the last access/modify/create details of a file to a specified date - let's say 18th December 1998 - by clicking on a button.

I found this information in the Win32 help file, but i am unsure how to use this in delphi.

----// start win32 help file //----

The SetFileTime function sets the date and time that a file was created, last accessed, or last modified.

BOOL SetFileTime(

    HANDLE hFile,     // identifies the file
    CONST FILETIME *lpCreationTime,     // time the file was created
    CONST FILETIME *lpLastAccessTime,     // time the file was last accessed
    CONST FILETIME *lpLastWriteTime      // time the file was last written
   );    
 

Parameters

hFile

Identifies the file for which to set the dates and times. The file handle must have been created with GENERIC_WRITE access to the file.

lpCreationTime

Points to a FILETIME structure that contains the date and time the file was created. This parameter can be NULL if the application does not need to set this information.

lpLastAccessTime

Points to a FILETIME structure that contains the date and time the file was last accessed. The last access time includes the last time the file was written to, read from, or (in the case of executable files) run. This parameter can be NULL if the application does not need to set this information.

lpLastWriteTime

Points to a FILETIME structure that contains the date and time the file was last written to. This parameter can be NULL if the application does not want to set this information.

---// end win32 help file //----


specifically how do i setup the FILETIME structure... for that matter if i know the date i want to set am i required to do that???

thanks for your help.


0
Comment
Question by:frangers99
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
8 Comments
 
LVL 13

Expert Comment

by:Epsylon
ID: 6224033
Try this:


function FileSetCreationDate(Handle: Integer; Age: Integer): Integer;
var
 LocalFileTime, FileTime: TFileTime;
begin
 Result := 0;
 if DosDateTimeToFileTime(LongRec(Age).Hi, LongRec(Age).Lo, LocalFileTime) and
   LocalFileTimeToFileTime(LocalFileTime, FileTime) and
   SetFileTime(Handle, @FileTime, @FileTime, @FileTime) then Exit;
 Result := GetLastError;
end;

procedure TForm1.Button1Click(Sender: TObject);
var f: Integer;
begin
 f := FileOpen('c:\myfiles\test.txt', fmOpenReadWrite);
 FileSetCreationDate(f, DateTimeToFileDate(EncodeDate(1998, 12, 18)));
 FileClose(f);
end;
0
 

Author Comment

by:frangers99
ID: 6224057
wow that was quick! thanks. Only problem is it doesnt change the last accessed property...is that possible?
0
 

Author Comment

by:frangers99
ID: 6224073
wow that was quick! thanks. Only problem is it doesnt change the last accessed property...is that possible?
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 13

Expert Comment

by:Epsylon
ID: 6224093
Hmmm.... it should change it....
0
 
LVL 6

Expert Comment

by:edey
ID: 6225350
i wonder if fileClose(f) isn't overwriting the last accessed attr?

GL
Mike
0
 
LVL 6

Expert Comment

by:edey
ID: 6225367
ugh, didn't quite finish my thought :).  If setFileTime needs a file handle created with GENERIC_WRITE access then closing the handle will almost certainly update the access rec.  Quickly perusing the win32.hlp I don't seen another api for setting file times.  I ams wondering if you might have to open the files, change the system date/time, close the file & restore the system date/time.  A real kludge, and not really a good practice, perhaps someone else can think of a better way - if I'm not completely wrong here.

GL
Mike
0
 
LVL 13

Accepted Solution

by:
Epsylon earned 400 total points
ID: 6225578
My code works OK. What happens is that, when you open the properties of the file, the accessed date is updated. So this way you can't check it.

What you can do is changing the explorer view to 'details' and then add 'created' and 'accessed' to your current columns. To do that, right-click somewhere on the existing columns and select 'more' from the popup menu. Then enable the approperiate columns.
0
 

Author Comment

by:frangers99
ID: 6227394
what can i say! thanks.
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
Suggested Courses

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question