Is it possible to set the date/time of a directory in windows with Python? If so how?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • ToddLMorgan

    Is it possible to set the date/time of a directory in windows with Python? If so how?

    I'm trying to set any of the dates (create, modification, access) of a
    directory under windows with python.

    I'm trying to do this as I'm trying to write a unittest for a directory
    cleaning script I'm writing (ie I need the test to set the create/mod
    time for some of the directories so that I can be sure that the script
    works properly - as it picks dirs based upon their age).

    I've tried using the utime( path, times). That doesn't work as the doco
    states
    "Whether a directory can be given for path depends on whether the
    operating system implements directories as files (for example, Windows
    does not)."

    So that doesn't work.

    So I tried mark hammonds win32 extensions with something like this

    import win32file, win32con, pywintypes
    filehandle = win32file.Creat eFile(file,
    win32file.GENER IC_WRITE,win32f ile.FILE_SHARE_ WRITE,
    None,win32con.O PEN_ALWAYS, 0, None)
    nowWin32=pywint ypes.Time(theTi me)
    win32file.SetFi leTime(filehand le, nowWin32, nowWin32, nowWin32)

    which works fine for files but fails with "Access Denied" when I invoke
    the CreateFile with a directory. This seems to occur no matter the
    combination of READ or WRITE I choose for the parameters.

    So does anyone have any useful suggestions (other than not using
    windows)?

    I've thought of a couple of reallly nasty solutions:
    1. Temporarily alter the underlying system clock back to the required
    time and create the directory then resetting it back again afterwards.
    2. Create the required directory in some form of virtual filesystem -
    eg Zip file, rar archive, tar etc. Then extract it to the real
    filesystem and hope windows honors the timestamps (untested at this
    point).

    None of those is particularly appealing.

    Thanks for listening.

  • Roger Upole

    #2
    Re: Is it possible to set the date/time of a directory in windows with Python? If so how?

    "ToddLMorga n" <ToddLMorgan@gm ail.com> wrote in message news:1147509953 .594320.172890@ d71g2000cwd.goo glegroups.com.. .[color=blue]
    > I'm trying to set any of the dates (create, modification, access) of a
    > directory under windows with python.
    >
    > I'm trying to do this as I'm trying to write a unittest for a directory
    > cleaning script I'm writing (ie I need the test to set the create/mod
    > time for some of the directories so that I can be sure that the script
    > works properly - as it picks dirs based upon their age).
    >
    > I've tried using the utime( path, times). That doesn't work as the doco
    > states
    > "Whether a directory can be given for path depends on whether the
    > operating system implements directories as files (for example, Windows
    > does not)."
    >
    > So that doesn't work.
    >
    > So I tried mark hammonds win32 extensions with something like this
    >
    > import win32file, win32con, pywintypes
    > filehandle = win32file.Creat eFile(file,
    > win32file.GENER IC_WRITE,win32f ile.FILE_SHARE_ WRITE,
    > None,win32con.O PEN_ALWAYS, 0, None)
    > nowWin32=pywint ypes.Time(theTi me)
    > win32file.SetFi leTime(filehand le, nowWin32, nowWin32, nowWin32)
    >
    > which works fine for files but fails with "Access Denied" when I invoke
    > the CreateFile with a directory. This seems to occur no matter the
    > combination of READ or WRITE I choose for the parameters.
    >
    > So does anyone have any useful suggestions (other than not using
    > windows)?
    >
    > I've thought of a couple of reallly nasty solutions:
    > 1. Temporarily alter the underlying system clock back to the required
    > time and create the directory then resetting it back again afterwards.
    > 2. Create the required directory in some form of virtual filesystem -
    > eg Zip file, rar archive, tar etc. Then extract it to the real
    > filesystem and hope windows honors the timestamps (untested at this
    > point).
    >
    > None of those is particularly appealing.
    >
    > Thanks for listening.[/color]

    To create a handle to a directory, you have to use
    FILE_FLAG_BACK_ SEMANTICS.

    Roger


    Comment

    • ToddLMorgan

      #3
      Re: Is it possible to set the date/time of a directory in windows with Python? If so how?

      Thanks very much for that roger :-)

      I changed my code to

      filehandle = win32file.Creat eFile(file, win32file.GENER IC_WRITE,
      win32file.FILE_ SHARE_WRITE, None, win32con.OPEN_A LWAYS,
      win32con.FILE_F LAG_BACKUP_SEMA NTICS, None)
      nowWin32=pywint ypes.Time(theTi me)
      win32file.SetFi leTime(filehand le, nowWin32, nowWin32, nowWin32)

      ie FILE_FLAG_BACKU P_SEMANTICS and everything works fine

      Just for the sake of completeness ...

      I'd just thought of another solution ... to have python determine the
      modification date for the directory based upon the oldest contained
      file (I'm guessing windows does the opposite - ie the newest file mod)
      to give me the effect of having a directory with an older date.

      The virtual file system idea didn't work either ... files had the
      correct dates but the dirs didn't as doing the extraction with python
      libs is subject to the same constraints ... and I didn't think that
      altering the ZipInfo time entries would have any affect as they appear
      to only represent files and not directories. I could have spawned a
      command line to do the extraction but I lost interest at that point.

      thanks again

      Comment

      Working...