PDA

Показать полную графическую версию : Изменение атрибутов файла .doc


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

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

Admiral
30-05-2008, 06:07
Не в doc файлах дело, а в файлах в принципе, это я по поводу названия темы.
По поводу способа, экзотичен спору нет. :biggrin: А с изменениям системного времени очень бывает нужно, но не для сабжа.
Мой вариант Far или как подсказали портировануй под windows touch, утилиту которая изменяет временя/дату под nix/bsd системами.
Расскажу для Farа как. Находим нужный файл, жмём Ctrl+A и вбиваем нужное время и дату. Не слышал, что б потом откопали реальную дату, главное не обложатся с датой создания и изменения. Можно также посмотреть в Ворде время набора/редактирования, и указать его в разницу между создан и изменён.
И никакой системы восстановления и записей в журнале.

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

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

Tigr
31-05-2008, 22:13
Admiral, виноват. Похоже (http://www.google.ru/search?hl=ru&q=%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C+%D0%B4%D0%B0%D1%82%D1%83+%D1%84%D0%B0%D0%B9%D0%BB %D0%B0&lr=&aq=f) только сторонними средствами.

Admiral
31-05-2008, 22:38
Или самому скатать у Фара fileattr.cpp (http://farmanager.com/svn/trunk/unicode_far/fileattr.cpp) и дописать/написать себе свою версию attrib.
Нужная функция
int ESetFileTime(const wchar_t *Name,FILETIME *LastWriteTime,FILETIME *CreationTime, FILETIME *LastAccessTime,int FileAttr)

Я про изменения временного штампа на файлах, без изменения системного времени, сначала узнал как проделывать через touch в Никсе, потом нашёл сиё в Фаре, потом тоже, когда читал предыдущую тему (http://forum.oszone.net/thread-59346.html) не поленился и проверил attrib. И никак не мог понять, какого сего нету в нём?

Drongo
31-05-2008, 23:10
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
Нет это целое число только ответ функции, в данном примере о своей работе. Она себе всё что хочет может творить, а возвращает только ответ Да(1), Нет(0) или ещё что-то (2) в другом случаи.
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;
} >> (http://farmanager.com/svn/trunk/unicode_far/fileattr.cpp)
В данном случаи дата выставляется в теле функции.

Drongo
31-05-2008, 23:44
Admiral, возвращает только ответ Да(1), Нет(0) или ещё что-то (2) в другом случаи. »Спасибо я понял, возвращает код завершения выполнения программы. Мог бы и сам догадаться.




© OSzone.net 2001-2012