Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.10.05;
Скачать: CL | DM;

Вниз

Перезаписывание файла БЕЗ пересоздания   Найти похожие ветки 

 
Sammi   (2014-02-24 20:59) [0]

Здравствуйте, уважаемые.
Помогите с, казалось бы, нубским вопросом.
Стоит задача произвести запись в документ не меняя у него дату создания.
Внезапно, выяснилось что все стандартные способы CreateFile, FileOpen, Rewrite, TFileStream, TStringList - пересоздают файл.
В итоге концепция отслеживания даты модификации и даты создания теряет смысл. Потому что дата модификации и дата создания всегда одна и таже.
Уж от CreateFile с параметром OPEN_EXISTING  такого вообще не ожидал.

Соответственно вопрос - как перезаписать файл не трогая атрибут хранящий дату создания файла.


 
Rouse_ ©   (2014-02-24 21:03) [1]


> Перезаписывание файла БЕЗ пересоздания
>
> Sammi   (24.02.14 20:59) 

Есть такая возможность, но вопрос - а нафига?


 
Sammi   (2014-02-24 21:10) [2]

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


 
Dennis I. Komarov ©   (2014-02-24 21:15) [3]

Нафига не раскрыто


 
Дмитрий СС   (2014-02-24 21:26) [4]

Открыть для чтения и записи, обрезать и записать новое.


 
Sammi   (2014-02-24 21:44) [5]


> Нафига не раскрыто

У меня система такая:
есть набор взаимодействующих файлов.
самый старый(первый созданный) не умеет ни с кем взаимодействовать.
второй - знает как взаимодействовать с первым.
третий знает как взаимодействовать с первым и вторым.
самый новые знает как взаимодействовать со всеми.
когда более новый файл грузится, он знает, как взаимодействовать со всеми, и "рассказывает" им.
В итоге все знают как взаимодействовать друг с другом.

звучит достаточно извращенно, но на практике это дает возможность пользователям делать обновления для системы. без конфликтов и с минимумом гемороя.

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

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


> Открыть для чтения и записи, обрезать и записать новое.

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


 
Rouse_ ©   (2014-02-24 21:46) [6]

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


 
Inovet ©   (2014-02-24 22:14) [7]

В имени файла номер версии нельзя?


 
Dennis I. Komarov ©   (2014-02-24 22:20) [8]

Если не ошибаюсь, то в NTFS можно свои атрибуты делать...
Хотя про взаимодействие файлов друг с другом, да еще и приведенным rtf, все только запутаннее стало.


 
Inovet ©   (2014-02-24 22:23) [9]

> [8] Dennis I. Komarov ©   (24.02.14 22:20)
> в NTFS

А с сетевыми дисками как быть, а может там на флешке ещё надо.


 
Dennis I. Komarov ©   (2014-02-24 22:28) [10]

Дык я и говорю, ничего же непонятно. Тут надо четко понимать что и зачем надо. Возможно формат файла с контейнером контента.


 
Sammi   (2014-02-24 22:36) [11]

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


 
Styx   (2014-02-24 22:37) [12]

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


 
Inovet ©   (2014-02-24 22:59) [13]

> [12] Styx   (24.02.14 22:37)

Кто б сомневался.


 
clickmaker ©   (2014-02-25 09:18) [14]

> Стоит задача произвести запись в документ не меняя у него
> дату создания.

запись в файл меняет дату создания? первый раз слышу...


 
Inovet ©   (2014-02-25 09:31) [15]

> [14] clickmaker ©   (25.02.14 09:18)
> запись в файл меняет дату создания?

У меня это тоже сразу вызвало сомнения. Что-то там другое её меняет. Вот создал файл, через минуту изменил - врямя создания не изменилось.

                                   ДД.ММ.ГГГГГ чч:мм:сс,мс
Время последней записи:             25.02.2014  13:26:00,695
Время создания:                     25.02.2014  13:25:42,125
Время последнего доступа:           25.02.2014  13:25:42,125
Время изменения:                    25.02.2014  13:26:00,695


 
Sammi   (2014-02-25 09:48) [16]

На сетевом диске пробовали?


 
clickmaker ©   (2014-02-25 09:51) [17]

пробовали. Не меняется


 
clickmaker ©   (2014-02-25 09:54) [18]

т.е. "меняться" может только если файл реально пересоздается. Удаляется старый и создается новый.


 
Sammi   (2014-02-25 09:57) [19]

Ну вот, у меня по другому.
Вплоть до того, что может быть дата изменения раньше даты создания. :)


 
Sammi   (2014-02-25 10:00) [20]

http://pikucha.ru/icFGI


 
clickmaker ©   (2014-02-25 10:14) [21]

http://answers.microsoft.com/en-us/windows/forum/windows_xp-files/how-can-the-date-created-be-later-than-the-date/9e625c0d-8694-4c8e-8a27-3ce74687aa53


 
Sammi   (2014-02-25 10:28) [22]

На маке(где находится физически сетевой диск) отображается нормальная инфа о создании, 15:39. Так что это не тот случай.


 
Inovet ©   (2014-02-25 10:51) [23]

С часовыми поясами всё в порядке?


 
Да вот же   (2014-02-25 11:57) [24]

var
 Cr, La, Wr: FILETIME;
begin
 CreateFile(.., GENERIC_WRITE,...); // открываем
 GetFileTime(F, @Cr, @La, @Wr);     // сохраняем оригинальные даты и время
 ...пишем, читаем, что нужно
 SetFileTime(F, @Cr, @La, @Wr);   // восстанавливаем оригинальные даты и время
 CloseHandle(F);                         // закрываем файл

end;


 
Inovet ©   (2014-02-25 12:57) [25]

> [24] Да вот же   (25.02.14 11:57)

Ну и зачем к одному костылю другой прикручивать, когда непонятна причина? А причина наверняка в каких-нибудь настройках ОС, антивирях и т.п..


 
Styx   (2014-02-25 13:05) [26]


> т.е. "меняться" может только если файл реально пересоздается.
>  Удаляется старый и создается новый.

Если с файлом работать через MSOffice, то он так и делает. А речь шла про RTF... так что похоже на то.


 
Sammi   (2014-02-26 10:51) [27]

С часовыми поясами все ок.
Не. RTF моя прога создает.
Дело в работе с сетевым диском. Если работаю с локальным, то все ок.
Ну и повторюсь - зашиваю дату создания внутрь файла, так что проблема не актуальна.


 
tmp   (2014-02-26 17:48) [28]

Не скажу за Мак, а для винды дата создания это фигня, нельзя верить этому - её можно менять как хош.
Насчёт сетевого - думаю зависит от настроек того места где реально этот диск и соединяющей сети.
В архиве храните.


 
Inovet ©   (2014-02-27 10:47) [29]

> [28] tmp   (26.02.14 17:48)
> Насчёт сетевого - думаю зависит от настроек того места где
> реально этот диск и соединяющей сети.

Я и спросил про часовые пояса.



Страницы: 1 вся ветка

Текущий архив: 2014.10.05;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.007 c
8-1235415285
Кошкин
2009-02-23 21:54
2014.10.05
Модель в редакторе и в программе


15-1387389158
wl
2013-12-18 21:52
2014.10.05
Перевод с японского.


15-1393178439
Jeer
2014-02-23 22:00
2014.10.05
С днем Советской армии и военно-морского флота!


2-1382690602
coder123
2013-10-25 12:43
2014.10.05
не видно свойства класса


15-1393360202
Юрий
2014-02-26 00:30
2014.10.05
С днем рождения ! 26 февраля 2014 среда