Как изменить дату и время модификации файла?
Участников: 3
Страница 1 из 1
Как изменить дату и время модификации файла?
Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
SetFileTimevaldimir пишет:Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
В Freebasic такой команды нет. Но всё равно спасибо за ответ.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
К сожалению, но похоже, что специальных функций для этого в FB нет. Придется использовать специфичные для платформы вызовы - SetFileTime это WinAPI функция, вам нужно подключить windows.bi, чтоб использовать ее. На линукс, например, будет другой способ реализовать изменение временной метки (touch, например). А чтоб абстрагироваться от платформы, лучше вынести все это безобразие в отдельную функцию.valdimir пишет:В Freebasic такой команды нет. Но всё равно спасибо за ответ.
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Как изменить дату и время модификации файла?
Про Winapi это я догадался, вот только как всё это дело подключить в freebasic и использовать так в интернете и не нашел.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
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- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
1) Создать файл 1.txtvaldimir пишет:За пример спасибо. Попробовал его запустить - ничего не произошло. Наверно что-то не так делал.
2) Скомпилировать пример
3) Скомпилированный файл должен быть в одной папке с текстовым файлом
4) Запускаем скомпилированный файл
5) В свойствах файла смотрим дату создания
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
Всё так и сделал, но в свойствах файла ничего не меняется. Пробовал полный путь к файлу прописывать - не помогает.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
А какая система? Я могу предположить, что папка защищена от записи. Попробуйте программно создать файл в этой папке. Или попросту запустить файл с правами админа. Если не поможет, тогда не знаю, у меня все отлично работает.valdimir пишет:Всё так и сделал, но в свойствах файла ничего не меняется. Пробовал полный путь к файлу прописывать - не помогает.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
Система Windows XP SP3 x86, Freebasic 0.24.0. Папки ничем не защищены от записи (все записывают кому не лень ). Антивирус ESS 5, тоже никого не трогает (особенно своих).
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
Скомпилируйте код ниже как консольное приложение. Текстовый файл (.txt) должен быть на месте. Результаты из консоли сюда.valdimir пишет:Система Windows XP SP3 x86, Freebasic 0.24.0. Папки ничем не защищены от записи (все записывают кому не лень ). Антивирус ESS 5, тоже никого не трогает (особенно своих).
- Код:
#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: Как изменить дату и время модификации файла?
Результаты из консоли:
126
2
0
1996
0
1
0
1
126
2
0
1996
0
1
0
1
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
Createfile возвращает пустой хендл. Getlasterror вообще какую то неведомую ошибку. Я рискну предположить , что мешает антивирусник. Отключите его на время и попробуйте. Больше догадок у меня нет.valdimir пишет:Результаты из консоли:
126
2
0
1996
0
1
0
1
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
Почему-то по разному выводится результат. Первый раз запустил скомпилированный файл с командной строки так: program.exe>rezultat.txt. Затем скопировал содержимое файла rezultat.txt (результат в предыдущем посте).
А сейчас вручную переписал результат из консоли:
126
2
0
56
0
1
0
1
Включение/отключение антивируса не влияет на результат.
А сейчас вручную переписал результат из консоли:
126
2
0
56
0
1
0
1
Включение/отключение антивируса не влияет на результат.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
По этим результатам я ошибок не вижу. Все функции выполняются успешно. Проверил на виртуалке на winXP, тоже работает. Единственно только время показывает на час позднее. Тут уж не знаю то ли я чего не так сделал, то ли виртуалка косячит. На Windows 7 результаты верные.valdimir пишет:Почему-то по разному выводится результат. Первый раз запустил скомпилированный файл с командной строки так: program.exe>rezultat.txt. Затем скопировал содержимое файла rezultat.txt (результат в предыдущем посте).
А сейчас вручную переписал результат из консоли:
126
2
0
56
0
1
0
1
Включение/отключение антивируса не влияет на результат.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
А у меня вот так:
Может есть какой-нибудь другой способ? Этот по-видимому не везде идёт (пробовал на 2-х компах).
Может есть какой-нибудь другой способ? Этот по-видимому не везде идёт (пробовал на 2-х компах).
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
И в чем провал? На скрине я вижу, что все нормально. Посмотри сам в строке "создан 23 мая 2000 г , 3:55:00". Что собственно и требовалось.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
Да собственно вопрос то стоял: изменить дату и время модификации (последнего изменения) файла. В примере меняется только дата создания файла. Кроме того нужно эти параметры прочитать из одного файла и записать в другой.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
Я в шокеvaldimir пишет:Да собственно вопрос то стоял: изменить дату и время модификации (последнего изменения) файла. В примере меняется только дата создания файла. Кроме того нужно эти параметры прочитать из одного файла и записать в другой.
Вторую страницу вы меня водите за нос! Нет бы сразу написать, что у вас меняется только время создание файла (кстати в моем примере так и задумано), вместо этого вы пишете:
и это:Попробовал его запустить - ничего не произошло. Наверно что-то не так делал.
Вы хоть смотрели в исходный текст? Для кого я это написал:Всё так и сделал, но в свойствах файла ничего не меняется. Пробовал полный путь к файлу прописывать - не помогает.
...
' устанававливаем время создания файла
' если нужно время последнего доступа или последней перезаписи
' то точно также, но передаем структуру ft во втором и третьем параметре соответственно
...
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
Исходный текст я естественно смотрел, и если бы полностью понимал его, то не задавал бы здесь вопросов. А в самом начале темы я задал вопрос:
Так что по видимому мы не поняли друг друга: вы - мой вопрос, а я естественно ваш ответ.
Ответ на который и хотел узнать. А ваш пример, извините не смог ответить на этот вопрос, так как в нём было задумано не то, что нужно по существу вопроса.valdimir пишет:Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
Так что по видимому мы не поняли друг друга: вы - мой вопрос, а я естественно ваш ответ.
valdimir- Сообщения : 44
Дата регистрации : 2008-10-11
Откуда : Калининградская обл.
Re: Как изменить дату и время модификации файла?
Не знаю как можно понять комментарий в коде по другому? У файла три возможных времени (создание, изменение и открытие) Я изменил один. По аналогии меняются и другие два. Если и сейчас непонятно, перепишите строку из кода SetFileTime(h,@ft,0,0)valdimir пишет:Исходный текст я естественно смотрел, и если бы полностью понимал его, то не задавал бы здесь вопросов. А в самом начале темы я задал вопрос:Ответ на который и хотел узнать. А ваш пример, извините не смог ответить на этот вопрос, так как в нём было задумано не то, что нужно по существу вопроса.valdimir пишет:Подскажите как изменить дату и время модификации файла?
Есть функция, которая возвращает дату и время последней модификации файла "FileDateTime", а вот возможности изменить их я не нашёл. Мне нужно дату и время модификации одного файла скопировать в другой файл.
Так что по видимому мы не поняли друг друга: вы - мой вопрос, а я естественно ваш ответ.
на это: SetFileTime(h,0,@ft,0) и посмотрите результат
а потом так: SetFileTime(h,0,0,@ft) и тоже посмотрите результат.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Как изменить дату и время модификации файла?
Спасибо, разобрался. Получилось даже лучше, чем хотел.
Копируем дату и время (создания, модификации и открытия файла) из файла "1.txt" в файл "2.txt".
Копируем дату и время (создания, модификации и открытия файла) из файла "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
Откуда : Калининградская обл.
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|