Есть ли способы узнать дату перезаписи файла?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Есть ли способы узнать дату перезаписи файла?

Сообщение brigval » 10.01.2007 (Ср) 12:43

Столкнулся с такой проблемой.
Программа оценивает дату создания файла.
Если файл был открыт и изменен в процессе работы с приложением, а потом был сохранен, то дата создания файла сохраняется. Это нормально и это понятно. Но если файл был перезаписан без открытия его приложением, то дата создания опять сохраняется старая. То есть файл не открывался, не редактировался, а был полностью обновлен. Заменен, так сказать, на новый. Но с прежним именем.
Есть ли способы узнать дату перезаписи файла, ибо перезапись файла всегда должна оцениваться программой как создание нового файла?
brigval

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.01.2007 (Ср) 12:55

FileDateTime
Изображение

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 10.01.2007 (Ср) 17:17

tyomitch писал(а):FileDateTime

У меня код, который использует функции
FileTimeToLocalFileTime, FileTimeToSystemTime, LcalFileTimeToFileTime, SystemTimeToFileTime
В детали я, правда, не вдавался. Взял заготовку.

Но дело в том, что и в свойствах файла, просмотренных средствами Windows дата создания файла, в описанном случае, не изменяется.
brigval

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 10.01.2007 (Ср) 17:44

Пример есть в ApiGuide... Жаль что проект не развивается, а то иногда удобно не задумываясь скопировать несколько строчек...

Сайт: http://www.allapi.net/
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 10.01.2007 (Ср) 18:03

brigval писал(а):
tyomitch писал(а):FileDateTime

Но дело в том, что и в свойствах файла, просмотренных средствами Windows дата создания файла, в описанном случае, не изменяется.


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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.01.2007 (Чт) 0:15

!Viper! писал(а):
brigval писал(а):
tyomitch писал(а):FileDateTime

Но дело в том, что и в свойствах файла, просмотренных средствами Windows дата создания файла, в описанном случае, не изменяется.


собственн при пересоздании файла это логично.

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

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 11.01.2007 (Чт) 8:07

Поясню. У меня работа с PDF-файлами (конструкторскими документами) . Основное содержание которых не редактируется. Редактирование может состоять, например, в добавлении примечаний при проверке документов. В этом случае дата создания не меняется. И это правильно и хорошо.
Но если конструктор создает новый PDF, то здесь меняется и содержание документа. В этом случае дата смены содержания имеет смыл. Дата модификации файла меняется и при проверке и при перезаписи и по этой дате нельзя определить момент смены содержания PDF-файла.
Создавать новый очень удобно перезаписывая PDF-файл из основного приложения...
Выход, видимо, есть, если предварительно удалять старый файл, а потом содавать новый PDF. Однако это не очень удобно при практической работе.
Программно момент перезаписи не отследить.
Похоже, программно этот пока вопрос не решить. А так хотелось.
brigval

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.01.2007 (Чт) 8:31

Что-то я окончательно запутался в том, что же нужно автору... Или торможу с утра или одно из двух.

У файла три даты: создания, модификации и последнего доступа. Windows показывает в проводнике дату модификации, при просмотре свойств показывает все три даты. Если не применять SetFileTime, то дата вообще создания не меняется. При создании нового файла (пусть даже и под старым именем) все три даты будут новыми (опять же если не менять их через SetFileTime).
Весь мир матрица, а мы в нем потоки байтов!

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 11.01.2007 (Чт) 11:42

!Viper! писал(а):Что-то я окончательно запутался в том, что же нужно автору... При создании нового файла (пусть даже и под старым именем) все три даты будут новыми (опять же если не менять их через SetFileTime).


Скажу проще. Надо отследить был ли файл PDF перезаписан. Именно, перезаписан, а не создан вновь и не изменен открывающим его Adobe Acrobat (для вставки примечаний и т.п.).

Допустим, я создал новый PDF-файл и теперь сохраняю его Save As... Для того, чтоб не вводить имя сохраняемого файла, указываю на существующий файл созданный ранее. Adobe Acrobat спрашивает "Перезаписать?". Я отвечаю "Да". Старый файл пропадает, а новый сохраняется под старым именем и с датой создания старого, как бы уже и не существующего файла.
Получается, что содержание файла (информация в нем) обновлено полностью, но атрибут "Created" (физическая величина) не изменился. Вот что я имел ввиду.
Да, операции с файлами происходят на сервере и атрибуты времени не зависят от времени на локальных компьютерах.
brigval

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2007 (Чт) 12:02

Если я сотру файл и создам новый - это создание.
А если я открою файл, полностью перезапишу его, обрежу остаток и сделаю вид, что это "перезаписан", то с точки зрения системы это изменение.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 11.01.2007 (Чт) 12:04

это и есть создать файл заново, о чем тебе и писал Viper

PS
это я по поводу Save As для нашего автора

хотя похоже что-то не так:
= Notepad , например, все делает как надо (дата создания прежняя, дата модификации меняется)
= надо проверить на акробате, но у меня его нет

Допустим, я создал новый PDF-файл и теперь сохраняю его Save As... Для того, чтоб не вводить имя сохраняемого файла, указываю на существующий файл созданный ранее. Adobe Acrobat спрашивает "Перезаписать?". Я отвечаю "Да". Старый файл пропадает, а новый сохраняется под старым именем и с датой создания старого, как бы уже и не существующего файла.
Получается, что содержание файла (информация в нем) обновлено полностью, но атрибут "Created" (физическая величина) не изменился. Вот что я имел ввиду.
Да, операции с файлами происходят на сервере и атрибуты времени не зависят от времени на локальных компьютерах.


Похоже, что тебе придется все-таки использоват дату модификации файла, как тебе GSerg предложил.

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 11.01.2007 (Чт) 12:11

GSerg
Я до этого думал, что при перезаписи старый файл полностью удаляется. Но видимо, из-за того, что полное имя файла не меняется, "первые байты его" (скажу ка понимаю) не изменяют своего места на жестком диске, а это наверное является критерием создан/не создан для операционной системы.
Думаю, что вопрос исчерпан. Спасибо всем.
brigval

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 11.01.2007 (Чт) 12:17

Konst_One писал(а):Похоже, что тебе придется все-таки использоват дату модификации файла, как тебе GSerg предложил.

Да я об этом думал. Но надо отловить момент смены основного содержания, которое не меняется без перезаписи. А файл может быть модифицирован и проверяющим, который просто расставляет метки, примечания и т.д. То есть дата модификации не отражает нужную смену содержания PDF.

Выход, конечно, есть. Обязать пользователей удалять старый файл. Но это некрасивое решение, потому-что не удобное.
brigval

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 11.01.2007 (Чт) 17:45

Программно момент перезаписи не отследить.
Да ну?
Рой в сторону FindFirstChangeNotification с флагом FILE_NOTIFY_CHANGE_LAST_WRITE.
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.01.2007 (Чт) 17:50

И как ты, интересно, отличишь перезапись от дозаписи? Вопрос-то только в этом.
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 11.01.2007 (Чт) 18:09

Ну если перезапись файла в понимании автора это удаление и создание нового файла с таким же именем, тогда все просто (теоритически) - FindFirstChangeNotification будет следить только за изменением, конечно. А для отлова момента перезаписи нужно следить за удалением и созданием файла. Путь реализации - перехват АПИ.
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.01.2007 (Чт) 18:36

Перезапись файла в понимании автора -- это когда не добавляют примечания, а меняют основное содержание.
Старый файл при этом не удаляется.
Читай, что ли, топик, прежде чем отвечать? ;-)
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 11.01.2007 (Чт) 19:22

Да блин, прежде чем ответить раз пять перечитал, чтоб понять что нужно автору... Ну если меняют основное содержимое, тогда алгоритм crc32 автору в руки и пусть сравнивает блоки файла...
А я все практикую лечение травами...

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 12.01.2007 (Пт) 11:51

Twister писал(а):Да блин, прежде чем ответить раз пять перечитал, чтоб понять что нужно автору... Ну если меняют основное содержимое, тогда алгоритм crc32 автору в руки и пусть сравнивает блоки файла...


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

Открылись некоторые новые обстоятельства.

При перезаписи PDF-файла на сервере (Win2003 ENG) c локального компьютера с установленной WinXP ENG атрибут перезаписанного файла Created всегда отображает старое серверное время создания файла. Как я и описывал раньше. А с локалного компьютера с WinXP RUS - новое время (время перезаписи!) этого локального ! компьютера.

Далее. При открытии перезаписанного PDF-файла в его свойствах File>Properties в Created (так и называется) всегда отображается именно время перезаписи! Уже не важно серверное или локальное. То есть, видимо, вопрос можно свести к следующему: как считать это свойство PDF-файла не открывая его?
Средства в папке с инталированным Adobe Acrobat я просмотрел. Ничего подходящего не нашел.
brigval

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 12.01.2007 (Пт) 11:56

Есть замечательный контрол XpdfViewerCtrl.ocx, который я использую для быстрого предварительного просмотра PDF в уменьшенном виде, но и из него, кажется, нельзя взять нужное время.
brigval

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.01.2007 (Пт) 12:28

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.01.2007 (Пт) 12:51

brigval писал(а):Далее. При открытии перезаписанного PDF-файла в его свойствах File>Properties в Created (так и называется) всегда отображается именно время перезаписи! Уже не важно серверное или локальное. То есть, видимо, вопрос можно свести к следующему: как считать это свойство PDF-файла не открывая его?

Даром. Оно там в конце файла лежит, открытым текстом.
Но таки-да, придётся открыть ;-)
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 12.01.2007 (Пт) 17:46

как считать это свойство PDF-файла не открывая его?
Супер! Опять понеслось... :?
brigval
Тебе скинуть доки по NTFS? Будешь обращаться к диску в RAW режиме и читать файл "ручками"... :wink:
А я все практикую лечение травами...

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 12.01.2007 (Пт) 23:22

как считать это свойство PDF-файла не открывая его?


Ну ладно, ладно. Я имел ввиду не открывая приложением Adobe Acrobat.

Даром. Оно там в конце файла лежит, открытым текстом.
Но таки-да, придётся открыть

Это кажется то, что и нужно! Дальше я смогу разобраться сам.
Большое спасибо tyomitch и всем тоже большое спасибо!
brigval

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 19.01.2007 (Пт) 18:20

И все-таки не получается :(
Вот код. Выдает ошибку"Input past end of file" не пройдя и половины. Как быть? Может это файл нельзя просматривать как текстовый? А как тогда найти нужную фразу?

Код: Выделить всё
Function DatePDF(sFullFileNamePDF As String) As String
   Dim fh As Integer
   Dim sLine As String
   Dim FindText As String
   Dim p As Long
   On Error GoTo 1
   FindText = "/CreationDate(D:"
   fh = FreeFile
   Open sFullFileNamePDF For Input As #fh
   Do While Not EOF(fh)
      Input #fh, sLine
      p = InStr(sLine, FindText)
      If p Then
         sLine = Mid(sLine, p + Len(FindText), 8)
         Exit Do
      End If
      sLine = NS
   Loop
   Close #fh
   If Len(sLine) = 8 Then
      DatePDF = Mid$(sLine, 7, 2) & "." & _
                       Mid$(sLine, 5, 2) & "." & _
                       Mid$(sLine,1, 4)
   End If
   Exit Function
1:
   MsgBox "DatePDF: " & Err.Description
End Function
brigval

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.01.2007 (Пт) 18:27

Как, как. Open sFullFileNamePDF For Binary As #fh
Остальное всё так же.
Изображение

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 19.01.2007 (Пт) 18:35

tyomitch, заработало. Спасибо!
brigval


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 106

    TopList