Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   Изменение атрибутов файла .doc (http://forum.oszone.net/showthread.php?t=108056)

Di373R 29-05-2008 22:29 813997

Изменение атрибутов файла .doc
 
Привет! Сложилась ситуация при которой необходимо изменить время создания файла .doc
Я проделал следующие действия - переставил время в календаре Windows, создал файл требуемой датой, перевел время обратно, в итоге получил требуемое.
После этого сделал восстановление системы полагая что в системном журнале будет уведомление об изменении времени.

Вопрос в следующем: возможно ли потом будет узнать истинную дату создания по каким-нибудь скрытым атрибутам такого файла, и если да, то как изменить такой атрибут?
Также будут ли какие-нибуть записи в системном журнале XP о изменении даты в календаре Windows? Можно ли будет убрать такое событие, если оно будет иметь место, например сделав откат системы на предыдущий день?

Admiral 30-05-2008 06:07 814166

Не в doc файлах дело, а в файлах в принципе, это я по поводу названия темы.
По поводу способа, экзотичен спору нет. :biggrin: А с изменениям системного времени очень бывает нужно, но не для сабжа.

Мой вариант Far или как подсказали портировануй под windows touch, утилиту которая изменяет временя/дату под nix/bsd системами.
Расскажу для Farа как. Находим нужный файл, жмём Ctrl+A и вбиваем нужное время и дату. Не слышал, что б потом откопали реальную дату, главное не обложатся с датой создания и изменения. Можно также посмотреть в Ворде время набора/редактирования, и указать его в разницу между создан и изменён.
И никакой системы восстановления и записей в журнале.

Tigr 31-05-2008 00:29 814897

Di373R, Пуск - Выполнить - cmd
В полученном черном окне вбей строку attrib /? и нажми Enter - получишь описание команды. Конечно, я бы это делал любимым и незаменимым FAR-ом.

Admiral 31-05-2008 10:50 815020

Tigr, команда не даёт возможности, по крайне мере через документированные ключи, изменить что либо со временем. Если могла то как минимум не переписывали б touch с NIX/BSD, и конечно по этому делают через Фар, так как через данную команду это просто не возможно. Или можешь написать пример, зная недокументированные ключи? :dont-know

Tigr 31-05-2008 22:13 815475

Admiral, виноват. Похоже только сторонними средствами.

Admiral 31-05-2008 22:38 815504

Или самому скатать у Фара fileattr.cpp и дописать/написать себе свою версию attrib.
Нужная функция
int ESetFileTime(const wchar_t *Name,FILETIME *LastWriteTime,FILETIME *CreationTime, FILETIME *LastAccessTime,int FileAttr)

Я про изменения временного штампа на файлах, без изменения системного времени, сначала узнал как проделывать через touch в Никсе, потом нашёл сиё в Фаре, потом тоже, когда читал предыдущую тему не поленился и проверил attrib. И никак не мог понять, какого сего нету в нём?

Drongo 31-05-2008 23:10 815523

Admiral,
Цитата:

Цитата Admiral
int ESetFileTime(const wchar_t *Name,FILETIME *LastWriteTime,FILETIME *CreationTime, FILETIME *LastAccessTime,int FileAttr) »

У меня вроде бы оффтоповая тема. С принимаемыми параметрами всё вроде бы понятно, указатели. А вот с возвращаемым - не очень, int - целое число. Это значит, что по сути возвращает время в формате целого числа? Как в Excel'e - год, месяц, число, так?! :dont-know

Admiral 31-05-2008 23:34 815541

Нет это целое число только ответ функции, в данном примере о своей работе. Она себе всё что хочет может творить, а возвращает только ответ Да(1), Нет(0) или ещё что-то (2) в другом случаи.
Цитата:

Цитата fileattr.cpp
Код:

int ESetFileTime(const wchar_t *Name,FILETIME *LastWriteTime,FILETIME *CreationTime,
                  FILETIME *LastAccessTime,int FileAttr)
{
  if ((LastWriteTime==NULL && CreationTime==NULL && LastAccessTime==NULL) ||
      ((FileAttr & FA_DIREC) && WinVer.dwPlatformId!=VER_PLATFORM_WIN32_NT))
    return 1;
//...
    int Code=Message(MSG_DOWN|MSG_WARNING|MSG_ERRORTYPE,3,UMSG(MError),
                UMSG(MSetAttrTimeCannotFor),Name,UMSG(MHRetry), //BUGBUG
                UMSG(MHSkip),UMSG(MHCancel));
    if (Code<0)
      return 0; //???
    if(Code == 1)
      return 2;
    if(Code == 2)
      return 0;
  }
  return 1;
}

>>

В данном случаи дата выставляется в теле функции.

Drongo 31-05-2008 23:44 815552

Admiral,
Цитата:

Цитата Admiral
возвращает только ответ Да(1), Нет(0) или ещё что-то (2) в другом случаи. »

Спасибо я понял, возвращает код завершения выполнения программы. Мог бы и сам догадаться.


Время: 14:13.

Время: 14:13.
© OSzone.net 2001-