Форум: "Прочее";
Текущий архив: 2014.10.05;
Скачать: [xml.tar.bz2];
ВнизПерезаписывание файла БЕЗ пересоздания Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.003 c