Статьи из блога

Статьи из блога

Как изменить дату создания документа

Рубрика: Программы, Вопрос-Ответ, Макросы
Метки: |
Среда, 27 августа 2008 г.
Просмотров: 24965
Подписаться на комментарии по RSS
Версия для печати

[Ссылки на статью]

Этот вопрос однажды мне задал один человек, но я не смог найти на него ответа. Позже, мне прислали ссылку то ли на специальную программу, то ли на программное решение. Не могу сейчас вспомнить, да это и не важно.

 

На самом деле, даты создания, изменения или последнего открытия документа являются встроенными свойствами любого файла и изменить их так просто не удастся.

Но можно воспользоваться двумя способами изменения даты создания или изменения документа (да, и любого файла).

 

Первый способ - программный на VB. Это решение я нашел на сайте Microsoft в статье Как принудительно изменить атрибут файла. Код привожу ниже:

Option Explicit
' функции преобразования формата даты
Private Declare Function SystemTimeToFileTime& Lib "kernel32" (lpSystemTIME As SYSTEMTIME, lpFileTime As FILETIME)
Private Declare Function FileTimeToSystemTime& Lib "kernel32" (lpFileTime As FILETIME, lpSystemTIME As SYSTEMTIME)
' функции работы с файлами
Private Declare Function lopen& Lib "kernel32" Alias "_lopen" (ByVal lpFileName As String, ByVal wReadWhite As Long)
Private Declare Function lclose& Lib "kernel32" Alias "_lclose" (ByVal hFile As Long)
Private Declare Function SetFileTime& Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME)
' функция для анализа ошибок
Private Declare Function GetLastError& Lib "kernel32" ()
' для хранения даты во внутреннем формате
Private Type FILETIME
  dwLowDateTime As Long
  dwHighDateTime As Long
End Type
' для хранения даты в системном формате
Private Type SYSTEMTIME
  wYear As Integer
  wMonth As Integer
  wDayOfWeek As Integer
  wDay As Integer
  wHour As Integer
  wMinute As Integer
  wSecond As Integer
  wMilliseconds As Integer
End Type
Private Sub Form_Load()
  Dim SysTime As SYSTEMTIME, NowTime As FILETIME
  Dim FileName$, handleF&, wReadWrite&, k&, k1&
  ' дата в системном формате
  SysTime.wYear = 2008
  SysTime.wMonth = 6
  SysTime.wDay = 9
  SysTime.wHour = 7
  SysTime.wMinute = 18
  SysTime.wSecond = 24
  ' преобразование даты во внутренний двоичный формат
  k& = SystemTimeToFileTime(SysTime, NowTime)
  '
  ' имя файла - он должен существовать
  FileName$ = "C:\d.txt"	'это пример - Вы можете изменить на путь к свому файлу
  
  ' Работа с файлами только средствами функций API
  ' ВНИМАНИЕ! Для изменения атрибутов файла,
  ' он должен  быть открыт в режиме "разрешения
  ' записи", например:  режим "чтение-запись"
  ' Const OF_READWRITE& = 2
  wReadWrite& = 2
  ' Открытие файла
  handleF& = lopen&(FileName$, wReadWrite&)
  ' запись новых атрибутов даты
  k& = SetFileTime&(handleF&, NowTime, NowTime, NowTime)
  ' была ли ошибка? Можно проверить
  k1& = GetLastError ' код ошибки
  ' закрытие файла
  Call lclose(handleF&)
End Sub

Второй способ - использование специальных программ. Например, программы SetFileDate.

 

Программа изменения даты создания файла

 

С помощью этой программки можно изменить как дату (и время) создания файла, так и дату его изменения или последнего открытия. Простая программа, с интуитивно понятным интерфейсом.

 

Может быть, кто-то из читателей сайта знает другие способы изменения атрибутов документа, кроме описанных в заметке?

]]>twitter.com facebook Вконтакте Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Комментариев: 19

  1. My.Own.Word
    27.08.2008 в 13:45 | #1

    Мне кажется, что для таких операций больше подойдет файловый менеджер, например DISCo Commander (http://www.disco.ru/_files/dc53.exe).

    Там эта операция выполняется очень удобно: File - File Attributes:

    http://i34.tinypic.com/jfarlj.png

  2. сергей
    27.08.2008 в 16:17 | #2

    В Total Commander очень просто изменяются атрибуты файла: в меню Файл-Изменить атрибуты и все...

  3. mirage
    29.08.2008 в 08:19 | #3

    На vb писать макросы неудобно, а пользоваться спец. софтом для этого лучше имхо, потому что меньше проблем с кодировкой символов, имхо.

  4. Олеся
    01.09.2008 в 01:19 | #4

    А зачем менять дату документа?

  5. Екатерина
    28.11.2008 в 18:06 | #5

    Можно создать новый документ и скопировать в него весь текст из ворда.

  6. DAN@POCHTA.RU
    18.12.2008 в 10:32 | #6

    Спасибо!

    А если таких документов 5000! что по одному открывать?, а после тотал коммндера инфа о создателе-владельце файла все равно остается.

  7. MensoN
    01.06.2009 в 12:49 | #7

    Total не меняет дату создания, он меняет строку "изменен"!!!!!!!

  8. Станислав
    05.01.2010 в 23:21 | #8

    В любом случае, насколько мне известно, понятия "дата создания файла" и "дата создания документа" понятия разные. Первое обеспечивается средствами файловой системы, и именно здесь Far, TimeStmp by J.Berkes и подобные программы могут помочь, второе является атрибутом документа, который хранится в самом содержимом файла, обеспечивается структурой .doc, и временные штампы ставит уже непосредственно Word.

    По-крайней мере, в формате word 2003 это так. docx, тот что из word 2007, вообще сделан в виде xml-структуры, из этого могу сделать предположение, что время хранится в чём-то наподобие meta-данных, так же в самом файле.

  9. stranger_jack@mail
    04.02.2010 в 19:29 | #9

    А как изменить в MS Excel именно дату создания документа?

    Внешними средствами (изменение системной даты, утилиты типа SetFileDate и т.п.) это сделать не удается. А надо.

  10. Аноним
    06.02.2010 в 23:36 | #10

    как изменить дату в программе "компас"? подскажите пожалуйста!

  11. Сергей
    13.02.2010 в 23:27 | #11

    to stranger_jack

    с Excel не работаю давно, пользуюсь OpenOffice. В нём в диалоге свойств файла (Файл-Свойства) на первой закладке есть кнопка Сбросить - устанавливает текущее время и дату в качестве времени и даты создания документа. Пробуйте! Но не забудьте поменять и время изменения файла той же SetFileDate - это время хранится в файловой системе в отличие от даты создания документа, хранящейся внутри файла. Изменяя одно, не меняешь другое.

  12. Semen
    24.02.2010 в 01:06 | #12

    подскажите пожалуйста как изменить даты создания таблиц/запросов/форм/отчётов в акцессе (оччень много связей и тд и тп) =(

  13. Евгений
    02.05.2010 в 14:10 | #13

    TotalCommander меняет обе даты: дату создания и модификации документа!

  14. Илья
    03.10.2010 в 17:23 | #14

    В FAR`e - Ctrl+a и меняйте

  15. 18.10.2011 в 20:41 | #15

    Все не так просто как кажется, Например в программе Компас изменить дату создания модели я не знаю как

    Сохранить как, или изменение имени файла тут не помогает.

    Если посмотреть в вкладку Файл->Информация о документе. Там все равно будет написано, реальное время создания файла.

  16. Mustang98rus
    08.11.2011 в 22:46 | #16

    А не вариант поменять дату на компе, отключить инет, создать новый файл, копировать всё со старого и перенести в новый? И вот Вам документ с любой датой.

    А как например вместо даты поставить надпись "Давно" или "А какая раздница? =)"

  17. Аноним
    12.12.2011 в 09:57 | #17

    Эта программа меняет дату во вкладке "общие", но в "сводке" в подробной информации дата не меняется.

  18. салют
    21.12.2011 в 16:24 | #18

    Делайте через Total Commander, файлы-изменить атрибуты-проставить дату и время как будет вам угодно, программа усе сделает и будете довольны. Проверено! Рекомендую.

  19. alexey
    25.12.2011 в 18:42 | #19

    изменить системную дату (часы снизу справа) на компьютере и пересохранить документ с новой датой

Оставьте комментарий!

(обязательно)

^ Наверх