怎样修改文件夹的创建日期?

解决方案 »

  1.   

    怎么会用SetFileAttributes?这个函数只是用来改属性的。
    我觉得应该打开一个文件夹,然后取得它的标示符(文件夹没有handle)
    然后再用SetFileTime来该时间。
    不过应该有windows api可以直接更改时间,但好像是隐藏的。
    谁能帮忙呀!!!!
      

  2.   

    使用CreateFile打开目录时,一般只能指定为GENERIC_READ,不能为GENERIC_WRITE。不过在NT下,可以在Flag中加入FILE_FLAG_BACKUP_SEMANTICS标志,就可以以写模式打开目录,从而可以修改目录的时间属性。hFile := CreateFile(PChar(FileName),
                        GENERIC_READ or GENERIC_Write,
                        FILE_SHARE_READ or FILE_SHARE_Write,
                        nil,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL or FILE_FLAG_BACKUP_SEMANTICS,
                        0);
    ************************{ Sets the time for both files and directories } 
    { for NT } function NT_SetDateTime(FileName: string; dtCreation, dtLastAccessTime, dtLastWriteTime: TDateTime): Boolean; 
    // by Nicholas Robinson 
    var 
      hDir: THandle; 
      ftCreation: TFiletime; 
      ftLastAccessTime: TFiletime; 
      ftLastWriteTime: TFiletime;   function DTtoFT(dt: TDateTime): TFiletime; 
      var 
        dwft: DWORD; 
        ft: TFiletime; 
      begin 
        dwft := DateTimeToFileDate(dt); 
        DosDateTimeToFileTime(LongRec(dwft).Hi, LongRec(dwft).Lo, ft); 
        LocalFileTimeToFileTime(ft, Result); 
      end; begin 
      hDir := CreateFile(PChar(FileName), 
                         GENERIC_READ or GENERIC_WRITE, 
                         0, 
                         nil, 
                         OPEN_EXISTING, 
                         FILE_FLAG_BACKUP_SEMANTICS, 
                         0); 
      if hDir <> INVALID_HANDLE_VALUE then  
      begin 
        try 
          ftCreation       := DTtoFT(dtCreation); 
          ftLastAccessTime := DTtoFT(dtLastAccessTime); 
          ftLastWriteTime  := DTtoFT(dtLastWriteTime); 
          Result := SetFileTime(hDir, @ftCreation, @ftLastAccessTime, @ftLastWriteTime); 
        finally 
          CloseHandle(hDir); 
        end; 
      end 
      else 
        Result := False; 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    begin 
      NT_SetDateTime('c:\temp\MyFolder', now, now, now); 
    end;