Удаление данных из файлов
В этом разделе рассматривается: fd.setfilesize, fd.cutfromtop.
Метод fd.setdata может только увеличить размер файла. Чтобы уменьшить размер файла (то есть удалить из него часть данных), используйте один из двух следующих методов. Оба метода работают с текущим выбранным файлом, выбор делается через свойство fd.filenum.
Метод fd.setfilesize отрезает конец файла и сохраняет указанное число байт в его начале:
'open a file 'on' file number 4
fd.filenum=4
fd.open("SomeFile")
fd.setfilesize(fd.filesize/2) 'cut the file size in half
Метод fd.setfilesize нельзя использовать для увеличения файла, только для его уменьшения. Секторы данных, ранее выделенные файлу, будут «освобождены» (помечены неиспользуемыми), если станут не нужны из-за уменьшения размера файла. Первый сектор данных файла, однако, всегда остаётся выделенным, даже если размер файла установлен в 0.
Размер файла, который показывает свойство fd.filesize (только чтение), будет скорректирован в меньшую сторону в соответствии с количеством оставшихся в файле данных.
Этот метод влияет на позицию указателя. Если файл становится пустым, указатель устанавливается в 0. Если новый размер файла не нулевой, но из-за него текущая позиция указателя становится недопустимой (то есть fd.pointer > fd.filesize + 1), указатель будет установлен в fd.filesize + 1.
Второй метод - fd.cutfromtop - удаляет указанное число секторов (не байт) из начала файла и оставляет конец файла нетронутым:
'open a file 'on' file number 2
fd.filenum=2
fd.open("SomeFile")
fd.cutfromtop(3) 'remove three front sectors from the file (that is, remove up to 3*256= 768 bytes of data)
Размер файла будет скорректирован в меньшую сторону в соответствии с объёмом удалённых данных. Например, выполнение fd.cutfromtop(2) для файла, занимающего три сектора данных, уменьшит его размер на 512 байт (объём данных двух удалённых секторов). Выполнение fd.cutfromtop(3) установит размер файла в 0.
Позиция указателя в результате выполнения этого метода всегда сбрасывается. Если новый размер файла равен 0, указатель также устанавливается в 0. Если размер файла не равен 0, указатель устанавливается в 1.
Методы fd.setfilesize и fd.cutfromtop изменяют секторы флеш-диска. Для максимальной надёжности вызывайте эти методы в рамках дисковых транзакций.