Удаление файлов с sd карты
- Войдите на сайт для отправки комментариев
Чт, 15/03/2018 - 15:32
Доброго времени суток. Мне нужно написать дата логгер, который каждый час записывает данные на флешку. Соответсвенно, рано или поздно объем будеи исчерпан, и нужно затирать файлы с начала (самые старые). Написал простой тестовый код, но он удаляет первый начальынй файл, а дальше новые. Соотвентственно на карте остаются 5 файлов 1.txt, 2.txt, 3.txt, 4.txt ,n.txt. Кто нибудь писал что то подобное? Можете помочь?
вопрос, в чем смысл строк с 16 по 21? Зачем открывать "NextFile" и потом его удалять? Есть же переменная i. в которой хранится индекс очередного файла - вот ее и надо использовать.
Я бы сделал так: - когда подходит время писать файл номер "i" - проверяем, есть ли уже такой на карте. Если нет - просто создаем новый. если уже есть - сначала стираем старый, потом пишем новый. Таким образом всегда будет стираться самый старый файл.
Это я уже экспериментировал, изначально там было так. Код просто идентично работает. В данном примере i это просто рандомное название. Потом это будет дата. На карте получится к примеру 5000 файлов. Я не могу сравнивать название файла, так как не знаю, какая дата.Я хочу сделать так: когда объем карты почти заполнится, возврашаемся в начала каталога (как я понял, это делает функция rewindDirectory), далее открываем, получаем имя лежащего там файла( это следующие 2 функции), удаляем его, далее происходит создание нового файла и программе нужно снова вернуться в начало каталога и проделать идентичную операцию. Но в начало каталога он почему то возвращается только первый раз
Я хочу сделать так: когда объем карты почти заполнится, возврашаемся в начала каталога (как я понял, это делает функция rewindDirectory), далее открываем, получаем имя лежащего там файла( это следующие 2 функции), удаляем его
а с чего вы взяли, что записи в каталоге у вас будут идти в порядке создания файлов? - это верно только для свежеотформатипрованной карты. с которой еще не стирали ни одного файла. Как только вы начнете удалять файлы из каталога. файловая система будет вписывать новые на освободившиеся места и порядок файлов перепутается. Точне даже не перепутается - а фактически изменится на обратный - и вы будете стирать самый свежий файл.
А, вот почему у меня только первый раз удаляет старый файл. Спасибо за разъяснение) Тогда без имени файла тут не обойтись?
Тогда без имени файла тут не обойтись?
думаю да, надо научиться вычислять самый старый файл в каталоге. ИМХО, имя файла в виде "прямой" даты - не самый удобный вариант для этого.
Но если дату записывать в обратном порядке, типа 20180315 - сортировать файлы по дате будет легче.
Спасибо, буду пробовать
Сделал, вдруг кому пригодится
Тут без текущей без даты - никак. Иначе сутки не включали - пропуск и однозначное соответствие логов дням нарушится. А если есть дата, то есть и день недели. Потому я делаю так. В Пн -пишу в 1.txt, Вт -пишу в 2.txt, и т.д., а если дата файла соответствующая текущему дню недели и текущая дата не совпадает - удаляю файл нафиг, он с прошлой недели. Лог за неделю как раз то, что надо.
Да, этот код предполагает, что текущая дата записывается в качестве имени файла. Если сутки не включали, ничего страшного, когда включат, появится файл с новой датой
Где? В мечтах? Имя Вы из int i; формируете (да еще и в стрингах оно красуется ))), и значения его как i++ формируете.
Еще раз повторюсь, это тестовый код, цель которого - удалять старые файлы при наступлении какого либо события. Имя файла естественно будет задавать функция, которая возвращает текущую дату в виде строки.