Дата съёмки файла
Копирование и перенос файлов для обычных пользователей превратился в неотъемлемую часть повседневной жизни многих людей. Благодаря развитию технологий и доступности различных устройств и сервисов, файлы могут перемещаться между компьютерами, смартфонами, планшетами и облачными хранилищами. Файл путешествует от устройства к устройству через «Телеграмм», затем попадает в облако, откуда его отправляют в «Вайбер» и переносят на планшет с iOS. И после закачивания на стационарный компьютер, с первого взгляда файл остаётся прежним. Открыв его свойства, можно обнаружить, что дата создания файла указана не в тот день, когда был произведен снимок, а например, в день, когда был скачан с флешки. Вроде бы, ну и что?
У меня возникла проблема, когда нужно было отсортировать фотографии по дате. Мне надоело вручную перетаскивать фотографии с облака в нужную папку. Поскольку я программист и имею возможность закрепить свои знания языка C++, я решил написать программу для сортировки файлов по дате.
Логично было предположить, что нужно взять дату создания файла из его свойств. Однако, учитывая вышесказанное, я понял, что на эту дату не стоит полагаться, так как при копировании файла, файловая система устанавливает её на текущую (также это зависит от операционной системы). В конечном итоге я нашел два способа получить нужную информацию.
Первый способ из названия файла. Некоторые устройства, закладывают в имя файла дату снимка. Например такие:
- '20181106_140735' можно записать так 2018-11-06 14:07:35
- 'VID_20181106_140735' тоже самое что первое только видео
- 'IMG_20181106_140735' тоже самое что второе только изображение
- '1413784444909' unix время 2014-10-20 05:54:04 UTC
- '2018-05-22-12_24_10_828' или 'photo_2024-03-31_18-54-33' с ними тоже всё ясно.
Это почти самый надежный способ сохранения даты. Почти, потому что если файлу изменить имя, дата будет потеряна навсегда. Если, конечно, устройство видеозаписи или фотосъемки не использует второй метод записи даты в файл.
Для получения метаданных из файла в C++ есть такая библиотека “ExifTool”. С помощью неё, можно получить много чего интересного. Например наименование производителя камеры, модель камеры, ориентация камеры в пространстве, дата и время редактирования. Но самое интересное это данные геолокации. Страна, регион, город, временная зона. Или данные GPS. Дата и время, высота в метрах относительно уровня моря, широта, долгота, скорость в узлах или указанных единицах измерения (км/ч, миль/ч, м/с), точное направление по компасу в градусах, точное направление по компасу камеры в градусах, угол тангажа в градусах с положительным шагом вверх, угол крена в градусах.
Впечатляющая информация? Единственный нюанс состоит в том, что некоторые данные появятся в том случае если устройство поддерживает эти функции. В своём списке фото, я вообще не нашёл GPS данных. Ради интереса, настроил сохранение фото на своём смартфоне с геолокацией. Но так её в файле и не нашёл. Ещё с определённого периода, моя фотокамера была настроена с опозданием на год и пару часов, после чего приходилось вручную настраивать дату.
Но этот способ тоже не является панацеей, так как попадаются фото которые были отсканированы и естественно дата фотографии отличается от даты создания цифровой версии.
В целом в моём случае редко не было даты создания файла. И моя программа хорошо упростила мне задачу. Разработку и тестирование программы проводил в ОС Linux (у вас до сих пор Windows?). Во время сортировки, файлы раскладываются по каталогам по следующей топологии - год/месяц/день.месяц.год/имя файла. С программой можно ознакомится по ссылке.
Резюмируя, хочу посоветовать: перед фото/видеосъёмкой корректировать дату аппарата. Если есть функция сохранять дату в имя файла, включать и её тоже. Но самый надёжный способ - добавлять дату поверх фото, хотя это не каждого устроит и реализовать программу сортировки будет сложнее.