Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
8-1234686127
Зашибис
2009-02-15 11:22
2014.10.05
Потоковое видео с IP-камеры AVIOSYS 9060A-MP на форме D6


15-1393088378
big_djo
2014-02-22 20:59
2014.10.05
Я Написал Книжку по Делфи, хотел бы узнать Ваше мнение и отзывы


11-1254976050
imp
2009-10-08 08:27
2014.10.05
Неработает loMultiSelect в ListBox (KOL MCK)


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


2-1382614616
qwerty123
2013-10-24 15:36
2014.10.05
ListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский