Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Октябрь 11, 2016, 16:22



Название: Как в Qt задавать атрибуты для файла?
Отправлено: billy4685 от Октябрь 11, 2016, 16:22
Добрый день! На днях у меня появилась необходимость задать для создаваемого файла атрибут "Дату последнего изменения файла".
Но пока так и нечего не нашел по этому поводу. Посмотреть эту дату можно через QFileInfo(file_path).lastModified().
А вот как задать ее в атрибуты файла не знаю? Может кто чем-то подскажет. Буду рад любой полезной информации.


Название: Re: Как в Qt задавать атрибуты для файла?
Отправлено: ksk- от Октябрь 11, 2016, 18:42
Скорее всего, для этого придётся написать платформозависимый код.


Название: Re: Как в Qt задавать атрибуты для файла?
Отправлено: billy4685 от Октябрь 13, 2016, 09:10
Скорее всего, для этого придётся написать платформозависимый код.

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


Название: Re: Как в Qt задавать атрибуты для файла?
Отправлено: Day от Октябрь 13, 2016, 12:04
В Unix -системах есть еще утилита touch. Одноименная утилита есть и в ДОСе. Например, входящая в комплект DC 2.0. Кажется, с виндовскими файлами тоже работает, если они короче 8-ми символов и на латинице


Название: Re: Как в Qt задавать атрибуты для файла?
Отправлено: billy4685 от Октябрь 19, 2016, 09:47
Спасибо всем за ответы. Для QNX получилось изменить дату создания и последней модификации файла через utime.
Теперь бы еще понять как в Windows это реализовать. Знаю что нужно использовать WinAPI. Но вот метода подобного
utime не нашел пока.


Название: Re: Как в Qt задавать атрибуты для файла?
Отправлено: Zerkin от Октябрь 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


Название: Re: Как в Qt задавать атрибуты для файла?
Отправлено: billy4685 от Ноябрь 30, 2016, 09:08
Благодарю за ответ.


Название: Re: Как в Qt задавать атрибуты для файла?
Отправлено: DarkHobbit от Февраль 22, 2021, 09:34
Касательно даты-времени, начиная с Qt 5.10 (да, на момент создания темы этого ещё не было) появился метод  QFileDevice::setFileTime().

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


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