Avatar billede darkside Nybegynder
14. august 2001 - 08:03 Der er 5 kommentarer og
1 løsning

Ændre Dato på fil

Hejsa der, jeg sad lige og tænkte på om det ikke er muligt at ændre dato på en via delphi?
Hvis vi siger filen er oprettet d. 12/05/99 er det så mulig at lave det om til 12/06/00?
Gerne et eks. :)

/DarkSide
Avatar billede pellelil Nybegynder
14. august 2001 - 08:19 #1
JCL (JEDI Code Library) har i JclFileUtils.pas en funktion til dette (SetFileCreation) .JCL kan hentes fra denne adresse: http://www.delphi-jedi.org/Jedi:CODELIBJCL:61315

<SNIP>
type
  // indicates the file time to set, used by SetFileTimesHelper and SetDirTimesHelper
  TFileTimes = (ftLastAccess, ftLastWrite, ftCreation);

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 SetFileCreation(const FileName: string; const DateTime: TDateTime): Boolean;
begin
  Result := SetFileTimesHelper(FileName, DateTime, ftCreation);
end;
</SNIP>
Avatar billede darkside Nybegynder
14. august 2001 - 08:22 #2
Hm hvordan får jeg den lige til at sætte en bestemt dato på en fil?
Eks hvis jeg har en edit box med 20/05/00 så skal den sætte den dato på en valgt fil.
Avatar billede borrisholt Novice
14. august 2001 - 08:35 #3
JEg har en gang skrevet en lille klasse til at løse problemet med :

type
    TFile = class
    private
      FFileName : TFileName;
      Function GetFileLastAccessTime : TDateTime;
      procedure SetFileLastAccessTime(const Value: TDateTime);
      function GetFileLastWriteTime: TDateTime;
      procedure SetFileLastWriteTime(const Value: TDateTime);
      function GetFileCreationTimeTime: TDateTime;
      procedure SetFileCreationTimeTime(const Value: TDateTime);
      function GetFileAttributes: LongInt;
      procedure SetFileAttributes(const Value: LongInt);
    public
      Constructor Create(const FileName : TFileName);
      property FileLastAccessTime : TDateTime read GetFileLastAccessTime write SetFileLastAccessTime;
      property FileCreationTimeTime : TDateTime read GetFileCreationTimeTime write SetFileCreationTimeTime;
      property FileLastWriteTime : TDateTime read GetFileLastWriteTime write SetFileLastWriteTime;
      property FileAttributes : LongInt read GetFileAttributes write SetFileAttributes;
      property Filename : TFileName read FFilename;
    end;

{ TFile }

constructor TFile.Create(const FileName: TFileName);
begin
  inherited Create;
  FFileName := FileName;
end;

function TFile.GetFileAttributes: LongInt;
var
  Win32FindData : TWin32FindData;
  Handle : THandle;
begin
  Result:=-1; // Returns -1 if the functions fails
  Handle := Windows.FindFirstFile(PChar(FFilename), Win32FindData);
  if INVALID_HANDLE_VALUE <> Handle then
  begin
    Result :=0;
    Windows.FindClose( Handle );
    if (Win32FindData.dwFileAttributes and faReadOnly) = faReadOnly then
      Result := Result or faReadOnly;

    if (Win32FindData.dwFileAttributes and faHidden) = faHidden then
      Result := Result or faHidden;

    if (Win32FindData.dwFileAttributes and faSysFile) = faSysFile then
      Result := Result or faSysFile;

    if (Win32FindData.dwFileAttributes and faVolumeID) = faVolumeID then
      Result := Result or faVolumeID;

    if (Win32FindData.dwFileAttributes and faDirectory) = faDirectory then
      Result := Result or faDirectory;

    if (Win32FindData.dwFileAttributes and faArchive) = faArchive then
      Result := Result or faArchive;
  end;
end;

function TFile.GetFileCreationTimeTime: TDateTime;
var
  DosFileTime    : DWORD;
  LocalFileTime  : TFileTime;
  Handle : THandle;
begin
  Result:=-1; // Returns -1 if the functions fails
  Handle:=FileOpen(FFileName,fmOpenReadWrite);
  if INVALID_HANDLE_VALUE <> Handle then
  begin
    GetFileTime(Handle, @LocalFileTime,nil,nil);
    FileTimeToLocalFileTime( LocalFileTime, LocalFileTime );
    FileTimeToDosDateTime(LocalFileTime ,LongRec(DosFileTime).Hi, LongRec(DosFileTime).Lo);
    Result := FileDateToDateTime(DosFileTime);
    FileClose( Handle );
  end;
end;

function TFile.GetFileLastAccessTime : TDateTime;
var
  DosFileTime    : DWORD;
  LocalFileTime  : TFileTime;
  Handle : THandle;
begin
  Result:=-1; // Returns -1 if the functions fails
  Handle:=FileOpen(FFileName,fmOpenReadWrite);
  if INVALID_HANDLE_VALUE <> Handle then
  begin
    GetFileTime(Handle, nil, @LocalFileTime,nil);
    FileTimeToLocalFileTime( LocalFileTime, LocalFileTime );
    FileTimeToDosDateTime(LocalFileTime ,LongRec(DosFileTime).Hi, LongRec(DosFileTime).Lo);
    Result := FileDateToDateTime(DosFileTime);
    FileClose( Handle );
  end;
end;

function TFile.GetFileLastWriteTime: TDateTime;
var
  DosFileTime    : DWORD;
  LocalFileTime  : TFileTime;
  Handle : THandle;
begin
  Result:=-1; // Returns -1 if the functions fails
  Handle:=FileOpen(FFileName,fmOpenReadWrite);
  if INVALID_HANDLE_VALUE <> Handle then
  begin
    GetFileTime(Handle, @LocalFileTime,nil,nil);
    FileTimeToLocalFileTime( LocalFileTime, LocalFileTime );
    FileTimeToDosDateTime(LocalFileTime ,LongRec(DosFileTime).Hi, LongRec(DosFileTime).Lo);
    Result := FileDateToDateTime(DosFileTime);
    FileClose( Handle );
  end;
end;

procedure TFile.SetFileAttributes(const Value: LongInt);
begin
  Windows.SetFileAttributes(PChar(FFileName), Value)
end;

procedure TFile.SetFileCreationTimeTime(const Value: TDateTime);
var
  LocalFileTime, FileTime: TFileTime;
  Handle : THandle;
  Age    : Longint;
begin
  Handle:=FileOpen(FFileName,fmOpenReadWrite);
  Age:=DateTimeToFileDate(Value);
  DosDateTimeToFileTime(LongRec(Age).Hi, LongRec(Age).Lo, LocalFileTime);
  LocalFileTimeToFileTime(LocalFileTime, FileTime);
  SetFileTime(Handle,@LocalFileTime,nil, nil);
  FileClose(Handle);
end;

procedure TFile.SetFileLastAccessTime(const Value: TDateTime);
var
  LocalFileTime, FileTime: TFileTime;
  Handle : THandle;
  Age    : Longint;
begin
  Handle:=FileOpen(FFileName,fmOpenReadWrite);
  Age:=DateTimeToFileDate(Value);
  DosDateTimeToFileTime(LongRec(Age).Hi, LongRec(Age).Lo, LocalFileTime);
  LocalFileTimeToFileTime(LocalFileTime, FileTime);
  SetFileTime(Handle,nil, @LocalFileTime,nil);
  FileClose(Handle);
end;

procedure TFile.SetFileLastWriteTime(const Value: TDateTime);
var
  LocalFileTime, FileTime: TFileTime;
  Handle : THandle;
  Age    : Longint;
begin
  Handle:=FileOpen(FFileName,fmOpenReadWrite);
  Age:=DateTimeToFileDate(Value);
  DosDateTimeToFileTime(LongRec(Age).Hi, LongRec(Age).Lo, LocalFileTime);
  LocalFileTimeToFileTime(LocalFileTime, FileTime);
  SetFileTime(Handle,nil,nil,@LocalFileTime);
  FileClose(Handle);
end;



Jens B
Avatar billede darkside Nybegynder
14. august 2001 - 08:41 #4
Øhm hvordan bruges den lige?....
Avatar billede borrisholt Novice
14. august 2001 - 08:43 #5
darkside >> Send lige en E-mail til Jens@Borrisholt.com så sender jeg et eksempel.

Jens B
Avatar billede borrisholt Novice
14. august 2001 - 14:38 #6
darkside >>Virker det ?

Jens B
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