Avatar billede slowaterz Nybegynder
13. november 2001 - 09:40 Der er 7 kommentarer og
1 løsning

Manipulation af dato/tid på filer og biblioteker

Jeg har fået mit lille testprogram til at ændre \"modified\" date/tid på filer (jeg brugte FileSetDate funktionen). Kan man ændre på dato/tid på biblioteker ? Kan man ændre \"created\" dato/tid på filer og biblioteker ?
Avatar billede torbenmelander Nybegynder
13. november 2001 - 09:47 #1
Jo, du skal bruge nogle API kald .. kan dog ikke lige huske hvad de hedder .. vender tilbage hvis andre ikke svarer
Avatar billede martinlind Nybegynder
13. november 2001 - 10:04 #2
Prøv API kaldet :

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
  );


/Martin
Avatar billede slowaterz Nybegynder
13. november 2001 - 10:19 #3
martin >>> jeg har ikke arbejdet med API kald i Delphi før - hvor kan man finde hjælp til det ?
Avatar billede slowaterz Nybegynder
13. november 2001 - 10:32 #4
der står noget i Delphi hjælp om at deklarere en procedure \"eksternt\", så kan programmet bruge funktioner i DLL\'erne, der ligger i windows - kan det bruges ?
Avatar billede martinlind Nybegynder
13. november 2001 - 10:44 #5
NEj det behøver du ikke, du skal bare havde en FileHandle, den kan du også få med et api kald, det er ikke anderledes en alm delphi kode, der er mulighed for at lave et hjælpe menu hvis du custimizer din toolbar og går ind under hjælp kan du smide en API-hjælpe knap op på din menu-bar ( er anbefalet af borland ).

Du laver api kald som et hvert andet funktions kald

/Martin
Avatar billede torbenmelander Nybegynder
13. november 2001 - 18:58 #6
Så kom jeg hjem, her er det kode jeg har til emnet:

JCL (Jedi Code Library) indeholder 3 funktioner til formålet:
function SetFileLastWrite(const FileName: string; const DateTime:
TDateTime): Boolean;
function SetFileLastAccess(const FileName: string; const DateTime:
TDateTime): Boolean;
function SetFileCreation(const FileName: string; const DateTime: TDateTime):
Boolean;

<SNIP>
function SetFileTimesHelper(const FileName: string; const DateTime:
TDateTime; Times: TFileTimes): Boolean;
var
  Handle: THandle;
  FileTime: TFileTime;
  SystemTime: TSystemTime;
begin
  Result := False;
  Handle := CreateFile(PChar(FileName), GENERIC_WRITE, FILE_SHARE_READ, nil,
    OPEN_EXISTING, 0, 0);
  if Handle <> INVALID_HANDLE_VALUE then
  try
    //SysUtils.DateTimeToSystemTime(DateTimeToLocalDateTime(DateTime),
SystemTime);
    SysUtils.DateTimeToSystemTime(DateTime, SystemTime);
    if Windows.SystemTimeToFileTime(SystemTime, FileTime) then
    begin
      case Times of
        ftLastAccess:
          Result := SetFileTime(Handle, nil, @FileTime, nil);
        ftLastWrite:
          Result := SetFileTime(Handle, nil, nil, @FileTime);
        ftCreation:
          Result := SetFileTime(Handle, @FileTime, nil, nil);
      end;
    end;
  finally
    CloseHandle(Handle);
  end;
end;

//--------------------------------------------------------------------------
----

function SetFileLastAccess(const FileName: string; const DateTime:
TDateTime): Boolean;
begin
  Result := SetFileTimesHelper(FileName, DateTime, ftLastAccess);
end;

//--------------------------------------------------------------------------
----

function SetFileLastWrite(const FileName: string; const DateTime:
TDateTime): Boolean;
begin
  Result := SetFileTimesHelper(FileName, DateTime, ftLastWrite);
end;

//--------------------------------------------------------------------------
----

function SetFileCreation(const FileName: string; const DateTime: TDateTime):
Boolean;
begin
  Result := SetFileTimesHelper(FileName, DateTime, ftCreation);
end;

//--------------------------------------------------------------------------
----</SNIP>
Avatar billede slowaterz Nybegynder
14. november 2001 - 08:03 #7
torbenmelander >>> Jeg endte med noget kode, der ligner din til forveksling - jeg brugte også SetFileTime og var også nødt til at konvertere frem og tilbage mellem SYSTEMTIME, FILETIME og TDateTime.
Kan dit program håndtere biblioteker ? Jeg brugte det eksempel, der er i Windows API hjælpen, til at få en handle til et bibliotek (det er også CreateFile, der bliver brugt, bare med lidt anderledes parametre).
Avatar billede torbenmelander Nybegynder
14. november 2001 - 08:18 #8
slowaterz > det ved jeg ikke, prøv ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester