function SetFileDateTime(FileName : String; NewDateTime : TDateTime): Boolean; 
var 
  FileHandle: Integer; 
  FileTime: TFileTime; 
  LFT: TFileTime; 
  LST: TSystemTime; 
begin 
  Result := False; 
  Try 
    DecodeDate(NewDateTime, LST.wYear, LST.wMonth, LST.wDay); 
    DecodeTime(NewDateTime, LST.wHour, LST.wMinute, LST.wSecond,LST.wMilliSeconds); 
    IF SystemTimeToFileTime(LST, LFT) Then 
    begin 
      IF LocalFileTimeToFileTime(LFT, FileTime) Then 
      begin 
        FileHandle := FileOpen(FileName, fmOpenReadWrite or 
                               fmShareExclusive); 
        IF SetFileTime(FileHandle, NIL, NIL, @FileTime) Then 
          Result := True; 
        end; 
      end; 
   Finally 
     FileClose(FileHandle); 
   end; 
end; procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if OpenDialog1.Execute then 
  begin 
    if SetFileDateTime(OpenDialog1.Filename,now) then 
    begin 
      ShowMessage('Date set to now !'); 
    end; 
  end; 
end;

解决方案 »

  1.   

    function AttachToFile(const AFileName: String; MemoryStream: TMemoryStream): Boolean; 
    var 
      aStream: TFileStream; 
      iSize: Integer; 
    begin 
      Result := False; 
      if not FileExists(AFileName) then 
        Exit; 
      try 
        aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite); 
        MemoryStream.Seek(0, soFromBeginning); 
        // seek to end of File     
        aStream.Seek(0, soFromEnd); 
        // copy data from MemoryStream    
        aStream.CopyFrom(MemoryStream, 0); 
        // save Stream-Size    
        iSize := MemoryStream.Size + SizeOf(Integer); 
        aStream.Write(iSize, SizeOf(iSize)); 
      finally 
        aStream.Free; 
      end; 
      Result := True; 
    end; function LoadFromFile(const AFileName: String; MemoryStream: TMemoryStream): Boolean; 
    var 
      aStream: TFileStream; 
      iSize: Integer; 
    begin 
      Result := False; 
      if not FileExists(AFileName) then 
        Exit;   try 
        aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite); 
        // seek to position where Stream-Size is saved 
        // zur Position seeken wo Streamgr鲞e gespeichert 
        aStream.Seek( - SizeOf(Integer), soFromEnd); 
        aStream.Read(iSize, SizeOf(iSize)); 
        if iSize > aStream.Size then 
        begin 
          aStream.Free; 
          Exit; 
        end; 
        // seek to position where data is saved 
        // zur Position seeken an der die Daten abgelegt sind 
        aStream.Seek( - iSize, soFromEnd); 
        MemoryStream.SetSize(iSize - SizeOf(Integer)); 
        MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize)); 
        MemoryStream.Seek(0, soFromBeginning); 
      finally 
        aStream.Free; 
      end; 
      Result := True; 
    end; procedure TForm1.SaveClick(Sender: TObject); 
    var 
      aStream: TMemoryStream; 
    begin 
      aStream := TMemoryStream.Create; 
      Memo1.Lines.SaveToStream(aStream); 
      AttachToFile('Test.exe', aStream); 
      aStream.Free; 
    end; procedure TForm1.LoadClick(Sender: TObject); 
    var 
      aStream: TMemoryStream; 
    begin 
      aStream := TMemoryStream.Create; 
      LoadFromFile('Test.exe', aStream); 
      Memo1.Lines.LoadFromStream(aStream); 
      aStream.Free; 
    end; 改变大小的。唉,郎兄,看好了:)
      

  2.   

    不要这么麻烦吧:var f:TFileStream;
    f:= TFileStream.Create('file',fmOpenReadWrite);
    f.Size := f.Size + 100;
    f.Free;