Russian Qt Forum
Ноябрь 22, 2024, 21:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в Qt задавать атрибуты для файла?  (Прочитано 7611 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Октябрь 11, 2016, 16:22 »

Добрый день! На днях у меня появилась необходимость задать для создаваемого файла атрибут "Дату последнего изменения файла".
Но пока так и нечего не нашел по этому поводу. Посмотреть эту дату можно через QFileInfo(file_path).lastModified().
А вот как задать ее в атрибуты файла не знаю? Может кто чем-то подскажет. Буду рад любой полезной информации.
Записан
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #1 : Октябрь 11, 2016, 18:42 »

Скорее всего, для этого придётся написать платформозависимый код.
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #2 : Октябрь 13, 2016, 09:10 »

Скорее всего, для этого придётся написать платформозависимый код.

Благодарю за ответ. Буду копать в этом направлении. Для UNIX систем есть функция untime.
Сейчас почитаю может она мне поможет. Ну и загляну в WinAPI.
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #3 : Октябрь 13, 2016, 12:04 »

В Unix -системах есть еще утилита touch. Одноименная утилита есть и в ДОСе. Например, входящая в комплект DC 2.0. Кажется, с виндовскими файлами тоже работает, если они короче 8-ми символов и на латинице
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #4 : Октябрь 19, 2016, 09:47 »

Спасибо всем за ответы. Для QNX получилось изменить дату создания и последней модификации файла через utime.
Теперь бы еще понять как в Windows это реализовать. Знаю что нужно использовать WinAPI. Но вот метода подобного
utime не нашел пока.
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #5 : Октябрь 19, 2016, 12:14 »

вроде, то,  что вам нужно в винапи?

Код
C++ (Qt)
BOOL WINAPI SetFileTime(
 _In_           HANDLE   hFile,
 _In_opt_ const FILETIME *lpCreationTime,
 _In_opt_ const FILETIME *lpLastAccessTime,
 _In_opt_ const FILETIME *lpLastWriteTime
);

https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724933(v=vs.85).aspx
« Последнее редактирование: Октябрь 19, 2016, 15:27 от Zerkin » Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #6 : Ноябрь 30, 2016, 09:08 »

Благодарю за ответ.
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #7 : Февраль 22, 2021, 09:34 »

Касательно даты-времени, начиная с Qt 5.10 (да, на момент создания темы этого ещё не было) появился метод  QFileDevice::setFileTime().

Правда, у меня в Qt 5.15.2 он ведёт себя как-то странно: FileModificationTime устанавливается только для двоичных файлов, для текстовых не хочет. Но я ещё вопрос до конца не исследовал, исследую - обязательно отпишусь, на каких системах это проявляется. (Но если кто может подтвердить эффект, пишите.)
Записан

Мои проекты на Qt: DoubleContact, LInvert
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 197


Просмотр профиля
« Ответ #8 : Март 31, 2021, 22:29 »

Разобрался.
Если вы сначала пишете в файл (QIODevice::WriteOnly) и хотите тут же скорректировать его дату, не закрывая, результат может оказаться непредсказуемым: на каких-то системах работает, на каких-то нет.
Если же закрыть записанный файл, тут же его открыть в режиме QIODevice::Append и только тогда вызвать
Код:
f.setFileTime(dateTime, QFileDevice::FileBirthTime);
f.setFileTime(dateTime, QFileDevice::FileModificationTime);
и закрыть - тогда установка даты гарантированно работает корректно. Напоминаю, что для работы QFile::setFileTime() файл должен быть открыт, а Qt - версии 5.10 или выше.
Выдохнул.
Записан

Мои проекты на Qt: DoubleContact, LInvert
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 23.