Просмотр полной версии : Непонятка с количеством файлов в TRD
Dr.Potapov
18.05.2015, 08:56
Добрай день.
Пилю тулзу под win32 для работы с образами TRD и тут столкнулся со странностью (в моем понимании):
* на диске 4 файла (диск отформатирован в эмуле, файлы созданы в нем же), (files:4, deleted:0)
* в своей тулзе их прекрасно вижу (files:4, deleted:0)
* в своей тулзе удаляю один файл (files:3, deleted:1) и создаю другой (files:4, deleted:1)
* в эмуле показывает 4 файла, но пишет files:3, deleted:1, не считая мой файл за файл почему то.
Параметры моего файла такие: "test " <D> 8sec S:00000, L:02048. То есть самый обычный файл.
Служебную информацию заполняю - убавляю кол-во свободных секторов (создание файла), прибавляю/убавляю кол-во файлов (создание/удаление), прибавляю кол-во удаленных файлов (удаление).
Остается одна мысль - при удалении не нужно убавлять количество файлов. Верно?
непонятно
приложи дамп каталога до и после удаления/создания файлов
Никуда файл не удаляется. Он всегда торчит на диске, до поступления команды мове.
Dr.Potapov
18.05.2015, 09:28
Зависит от того какой файл удаляется. Если последний в каталоге то по идее он не должен помечаться удаленным вместо этого первый байт будет 00 а не 01.
о! кстати про это то я и забыл. мой файл был как раз последний. спасибо большое за наводку, покопаю в эту сторону )
Если твоя тулза потом за ним создает файл
последовательность такая:
* 4 файла созданные в эмуле (boot<b>, testd<c>, pr1<c>, pr2<c>)
* -1 файл в моей тулзе (pr1<c> - не последний!)
* +1 файл в моей тулзе (test<d> - и последним клал и на место удаленного)
* открываю в эмуле - все 4 файла (boot<b>, testd<c>, pr2<c>, test<d> или boot<b>, testd<c>, test<d>, pr2<c> если пишу на место удаленного в каталоге диска)
но ТР-ДОС пишет что файлов 3 и 1 удаленный.
Нолучше приложить проблемный trd-файл посмотрим.
файл дома, а я на работе, вечером поковыряю еще, если не выйдет - приложу трд-шку.
Dr.Potapov
18.05.2015, 09:38
В твоем случае в реале должно быть так: ты удаляешь последний файл в каталоге
нет, удаляю не последний.
свой кладу последним (пробовал и не последним) - разницы нет.
SAM style
18.05.2015, 09:44
9й сектор корректно меняется при удалении/добавлении файла?
Новые файлы добавлять ТОЛЬКО в конец каталога - на место первого дескриптора с именем, начинающимся с #00. Никаких "вместо удалённого не последнего" - они остаются помеченными как "удаленные", это лечится только через MOVE.
Dr.Potapov
18.05.2015, 09:56
9й сектор корректно меняется при удалении/добавлении файла?
вроде бы да.
При удалении файла свой тулзой, в 9-м секторе
* -1 файл в #E4 (вот тут сомнения, надо ли это делать при удалении)
* +1 файл в #F4
При создании файла свой тулзой, в 9-м секторе
* +1 файл в #E4
* -0800h в #E5 #E6, новый свободный сектор и дорожку в #E1 #E2
Новые файлы добавлять ТОЛЬКО в конец каталога - на место первого дескриптора с именем, начинающимся с #00. Никаких "вместо удалённого не последнего" - они остаются помеченными как "удаленные", это лечится только через MOVE.
Это понятно, пробовал и в конец и на место. То что правильно добавлять в конец - понимаю хорошо.
SAM style
18.05.2015, 10:29
Потестируй на мелких действиях:
- удали не последний файл, проверь в эмуляторе
- удали последний файл, проверь
- ничего не удаляя создай файл, проверь
так хоть будет ясно, в каком месте перекос.
Возьми коммандер, который может скорректировать 9й сектор, проверь значения до коррекции (твои) и после (правильные) - если какой-то параметр неверный, узнаешь, какой.
Мой mctrd так и гонялся. С добавлениями файлов можешь глянуть http://github.com/samstyle/mctrd, функция trdPush
Dr.Potapov
18.05.2015, 10:31
Потестируй на мелких действиях:
Да поковыряю вечером еще, с наскоку вот не получилось )
Мой mctrd так и гонялся. С добавлениями файлов можешь глянуть http://github.com/samstyle/mctrd
Спасибо огромное )
null_device
18.05.2015, 14:09
Dr.Potapov, почитайте про механизм работы tr-dos в книге: "... для пользователей и программистов (http://trd.speccy.cz/book/ZX_TRDOS.ZIP)". Там эти тонкости "разжеваны" максимально доступным образом.
Dr.Potapov
18.05.2015, 22:51
Dr.Potapov, почитайте про механизм работы tr-dos в книге: "... для пользователей и программистов (http://trd.speccy.cz/book/ZX_TRDOS.ZIP)". Там эти тонкости "разжеваны" максимально доступным образом.
Спасибо ) Еще бы найти чем дежавюшки на компе почитать ))
В итоге оказалось что действительно, не нужно при удалении файла вычитать из #e4 единицу, так как TR'DOS это делает самостоятельно при подсчете файлов.
То есть при создании файла в #e4 добавляем 1, при удалении в #f4 добавляем 1. По команде LIST TR'DOS сам считает количество файлов, вычитая #f4 из #e4. Я ж это где то читал, но вот запамятовал.
Спасибо всем откликнувшимся )
При удалении "не последнего" файла увеличиваешь на 1 количество удаленных? А уменьшаешь при этом на 1 количество дескрипторов файлов в секторе 9?
Если что - то последнее делать не надо - TR-DOS по CAT и LIST показывает в графе Files разность количества дескрипторов и количества удаленных файлов.[COLOR="Silver"]
---------- Post added at 13:33 ---------- Previous post was at 13:32 ----------
Ага, ну, в общем, смортю, так и оказалось...
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot