Как изменить дату и время модификации файла?

Предыдущая тема Следующая тема Перейти вниз

Как изменить дату и время модификации файла?

Сообщение  valdimir в Сб Сен 21, 2013 8:36 am

Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Сб Сен 21, 2013 11:16 am

valdimir пишет:Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
SetFileTime

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Сб Сен 21, 2013 4:31 pm

В Freebasic такой команды нет. Но всё равно спасибо за ответ.

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  DiG. GeRR в Пн Сен 23, 2013 7:57 pm

valdimir пишет:В Freebasic такой команды нет. Но всё равно спасибо за ответ.
К сожалению, но похоже, что специальных функций для этого в FB нет. Придется использовать специфичные для платформы вызовы - SetFileTime это WinAPI функция, вам нужно подключить windows.bi, чтоб использовать ее. На линукс, например, будет другой способ реализовать изменение временной метки (touch, например). А чтоб абстрагироваться от платформы, лучше вынести все это безобразие в отдельную функцию.

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Пн Сен 23, 2013 10:31 pm

Про Winapi это я догадался, вот только как всё это дело подключить в freebasic и использовать так в интернете и не нашел.

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Вт Сен 24, 2013 6:17 am

valdimir пишет:Про Winapi это я догадался, вот только как всё это дело подключить в freebasic и использовать так в интернете и не нашел.
Код:
#Include "windows.bi"

Dim h As HANDLE
Dim ft As FILETIME
Dim st As SYSTEMTIME
Dim tzi As TIME_ZONE_INFORMATION
Dim As Short hour_  = 3 ' час
' узнаем разницу во времени для своего региона
GetTimeZoneInformation(@tzi)

' задаем время
st.wyear = 2000
st.wmonth = 5
st.wday = 23
If hour_+tzi.Bias\60<0 Then
   hour_ = hour_+24
EndIf
st.whour = (hour_+tzi.Bias\60)
st.wminute = 55

' открываем файл
h = CreateFile("1.txt",GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)

If h<> -1 Then
   ' преобразовываем системное время в файловое
   SystemTimeToFileTime( @st, @ft )
   ' устанававливаем время создания файла
   ' если нужно время последнего доступа или последней перезаписи
   ' то точно также, но передаем структуру ft во втором и третьем параметре соответственно
   SetFileTime(h,@ft,0,0)
   ' закрываем файл
   CloseHandle(h)
EndIf

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Вт Сен 24, 2013 7:01 pm

За пример спасибо. Попробовал его запустить - ничего не произошло. Наверно что-то не так делал.

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Вт Сен 24, 2013 9:21 pm

valdimir пишет:За пример спасибо. Попробовал его запустить - ничего не произошло. Наверно что-то не так делал.
1) Создать файл 1.txt
2) Скомпилировать пример
3) Скомпилированный файл должен быть в одной папке с текстовым файлом
4) Запускаем скомпилированный файл
5) В свойствах файла смотрим дату создания

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Вт Сен 24, 2013 9:48 pm

Всё так и сделал, но в свойствах файла ничего не меняется. Пробовал полный путь к файлу прописывать - не помогает.

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Вт Сен 24, 2013 10:47 pm

valdimir пишет:Всё так и сделал, но в свойствах файла ничего не меняется. Пробовал полный путь к файлу прописывать - не помогает.
А какая система? Я могу предположить, что папка защищена от записи. Попробуйте программно создать файл в этой папке. Или попросту запустить файл с правами админа. Если не поможет, тогда не знаю, у меня все отлично работает.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Вт Сен 24, 2013 11:08 pm

Система Windows XP SP3 x86, Freebasic 0.24.0. Папки ничем не защищены от записи (все записывают кому не лень Very Happy ). Антивирус ESS 5, тоже никого не трогает (особенно своих).

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Ср Сен 25, 2013 5:34 am

valdimir пишет:Система Windows XP SP3 x86, Freebasic 0.24.0. Папки ничем не защищены от записи (все записывают кому не лень Very Happy ). Антивирус ESS 5, тоже никого не трогает (особенно своих).
Скомпилируйте код ниже как консольное приложение. Текстовый файл (.txt) должен быть на месте. Результаты из консоли сюда.

Код:
#Include "windows.bi"

Dim h As HANDLE
Dim ft As FILETIME
Dim st As SYSTEMTIME
Dim tzi As TIME_ZONE_INFORMATION
Dim As Short hour_  = 3 ' час
' узнаем разницу во времени для своего региона
Var temp = GetTimeZoneInformation(@tzi)
? GetLastError
? temp
' задаем время
st.wyear = 2000
st.wmonth = 5
st.wday = 23
If hour_+tzi.Bias\60<0 Then
   hour_ = hour_+24
EndIf
st.whour = (hour_+tzi.Bias\60)
st.wminute = 55

' открываем файл
h = CreateFile("1.txt",GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
? GetLastError
? h
If h<> -1 Then
   ' преобразовываем системное время в файловое
   temp = SystemTimeToFileTime( @st, @ft )
   ? GetLastError
   ? temp
   ' устанававливаем время создания файла
   ' если нужно время последнего доступа или последней перезаписи
   ' то точно также, но передаем структуру ft во втором и третьем параметре соответственно
   temp = SetFileTime(h,@ft,0,0)
   ? GetLastError
   ? temp
   ' закрываем файл
   CloseHandle(h)
EndIf
Sleep

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Ср Сен 25, 2013 9:33 am

Результаты из консоли:
126
2
0
1996
0
1
0
1

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Ср Сен 25, 2013 2:32 pm

valdimir пишет:Результаты из консоли:
126
2
0
1996
0
1
0
1
Createfile возвращает пустой хендл. Getlasterror вообще какую то неведомую ошибку. Я рискну предположить , что мешает антивирусник. Отключите его на время и попробуйте. Больше догадок у меня нет.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Ср Сен 25, 2013 3:10 pm

Почему-то по разному выводится результат. Первый раз запустил скомпилированный файл с командной строки так: program.exe>rezultat.txt. Затем скопировал содержимое файла rezultat.txt (результат в предыдущем посте).
А сейчас вручную переписал результат из консоли:
126
2
0
56
0
1
0
1
Включение/отключение антивируса не влияет на результат.

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Ср Сен 25, 2013 5:06 pm

valdimir пишет:Почему-то по разному выводится результат. Первый раз запустил скомпилированный файл с командной строки так: program.exe>rezultat.txt. Затем скопировал содержимое файла rezultat.txt (результат в предыдущем посте).
А сейчас вручную переписал результат из консоли:
126
2
0
56
0
1
0
1
Включение/отключение антивируса не влияет на результат.
По этим результатам я ошибок не вижу. Все функции выполняются успешно. Проверил на виртуалке на winXP, тоже работает. Единственно только время показывает на час позднее. Тут уж не знаю то ли я чего не так сделал, то ли виртуалка косячит. На Windows 7 результаты верные.


trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Ср Сен 25, 2013 8:58 pm

А у меня вот так:



Может есть какой-нибудь другой способ? Этот по-видимому не везде идёт (пробовал на 2-х компах).

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Ср Сен 25, 2013 10:38 pm

И в чем провал? На скрине я вижу, что все нормально. Посмотри сам в строке "создан 23 мая 2000 г , 3:55:00". Что собственно и требовалось.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Чт Сен 26, 2013 8:40 am

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

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Чт Сен 26, 2013 12:14 pm

valdimir пишет:Да собственно вопрос то стоял: изменить дату и время модификации (последнего изменения) файла. В примере меняется только дата создания файла. Кроме того нужно эти параметры прочитать из одного файла и записать в другой.
Я в шоке Shocked

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

Попробовал его запустить - ничего не произошло. Наверно что-то не так делал.
и это:

Всё так и сделал, но в свойствах файла ничего не меняется. Пробовал полный путь к файлу прописывать - не помогает.
Вы хоть смотрели в исходный текст? Для кого я это написал:


...
 ' устанававливаем время создания файла
  ' если нужно время последнего доступа или последней перезаписи
  ' то точно также, но передаем структуру ft во втором и третьем параметре соответственно
...

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Чт Сен 26, 2013 12:36 pm

Исходный текст я естественно смотрел, и если бы полностью понимал его, то не задавал бы здесь вопросов. А в самом начале темы я задал вопрос:
valdimir пишет:Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
Ответ на который и хотел узнать. А ваш пример, извините не смог ответить на этот вопрос, так как в нём было задумано не то, что нужно по существу вопроса.
Так что по видимому мы не поняли друг друга: вы - мой вопрос, а я естественно ваш ответ.

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  trew в Чт Сен 26, 2013 1:35 pm

valdimir пишет:Исходный текст я естественно смотрел, и если бы полностью понимал его, то не задавал бы здесь вопросов. А в самом начале темы я задал вопрос:
valdimir пишет:Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
Ответ на который и хотел узнать. А ваш пример, извините не смог ответить на этот вопрос, так как в нём было задумано не то, что нужно по существу вопроса.
Так что по видимому мы не поняли друг друга: вы - мой вопрос, а я естественно ваш ответ.
Не знаю как можно понять комментарий в коде по другому? У файла три возможных времени (создание, изменение и открытие) Я изменил один. По аналогии меняются и другие два. Если и сейчас непонятно, перепишите строку из кода SetFileTime(h,@ft,0,0)

на это: SetFileTime(h,0,@ft,0) и посмотрите результат

а потом так: SetFileTime(h,0,0,@ft) и тоже посмотрите результат.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  valdimir в Чт Сен 26, 2013 2:32 pm

Спасибо, разобрался. Получилось даже лучше, чем хотел.
Копируем дату и время (создания, модификации и открытия файла) из файла "1.txt" в файл "2.txt".

Код:
#Include "windows.bi"
Dim As HANDLE h,h2
Dim ft As FILETIME
Dim st As SYSTEMTIME
' открываем файлы
h = CreateFile("1.txt",GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
h2 = CreateFile("2.txt",GENERIC_WRITE,FILE_SHARE_READ+FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
If h<> -1 And h2<> -1 Then  
   SystemTimeToFileTime( @st, @ft )' преобразовываем системное время в файловое
   GetFileTime(h,@ft,0,0) ' устанававливаем время создания файла
   SetFileTime(h2,@ft,0,0) ' если нужно время последнего доступа или последней перезаписи  
   GetFileTime(h,0,@ft,0) ' то точно также, но передаем структуру ft во втором и третьем параметре соответственно
   SetFileTime(h2,0,@ft,0)  
   GetFileTime(h,0,0,@ft)
   SetFileTime(h2,0,0,@ft)
   CloseHandle(h)   ' закрываем файлы
   CloseHandle(h2)
EndIf

valdimir

Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Как изменить дату и время модификации файла?

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения