Чи можна дізнатися кластер.
Чи можна дізнатися кластер (и) (або як там називаються місця де фізично розташовані файли (в сенсі на HDD)) на якому записаний будь-якої файл?
Якщо так, то як?
Заздалегідь дякую!
Кластер - це логічна одиниця мнформаціі на гвинті. Кожен файл займає ціле число кластерів, але останній кластер може бути використаний не повністю. Так виникають кластерні втрати. Чим менше розмір кластера, тим менше можлива різниця між його розміром і його заповненої частиною - тим менше кластерні втрати. Але більше розмір ФАТ.
Фізична одиниця інформації на гвинті - сектор. Він майже завжди (крім рідкісних особливих випадків) дорівнює 512 байт. Кілька секторів (ціле число, рівне або більше 1) складають кластер.
Трохи про організацію системи ФАТ.
Взагалі таблиця ФАТ представляє набір 16- або 32-бітних (звідси ФАТ-16 і ФАТ-32, на дискеті взагалі ФАТ-12) записів, кількість яких дорівнює кількості кластерів на диску.
У записі каталогу на кожен файл зберігається номер кластера, в якому лежить початок файлу. В елементі ФАТ з ЦИМ номером зберігається номер наступного кластера, або спеціальний код, що означає, що це останній кластер цього файлу. І так далі. Завдяки такій організації файл може бути як завгодно розкиданий по диску, але ОС завжди зможе прочитати його від початку до кінця. А ось якщо ФАТ накриється. Вважай, що інфа з гвинта втрачена.
Отже.
Якщо тобі потрібен номер кластера, з якого починається файл, дивишся соотв. запис каталогу. Як подивитися каталог. ось це я не знаю, може і є функція в Дельфах.
Якщо потрібен номер сектора, множити номер кластера на розмір кластера в секторах і додаєш початковий сектор файлової системи.
Інфа про розмір кластера, номері сектора почала файлів і т.п. знаходиться в секторі з логічним номером 0 (нуль).
ЗИ. А навіщо тобі це, може можна простіше зробити? Я теж свого часу хотів написати прогу для посекторного збереження гвинта, але потім кинув.
Vcoder спасибі за довідку!
Ідея така: зробити Wiper, але як ти розумієш для неможливості відновлення інформації потрібно що-небудь записати на місце цього файлу. А щоб записати на його місце що-небудь, треба це місце знати (на фізичному носії). Швидше за все оптимальним (а можливо і єдиним) варіантом буде дізнатися номер (а) кластера (ів) на яких файл був записаний. А потім на ці кластери записати якусь муть.
Якщо у тебе є Ася-стукайся 2444094
Просто перепиши файл на місці, а потім видали його.
Відкриваєш файл процедурою Reset і записавши в нього що душа забажає. Кількістю в розмір файлу або трохи більше. А потім видаляєш. Це спрацює.
Отже. Питання Майстрам:
У ДОС-е є переривання int 25h і int 26h: соотв. читання / запис логічних секторів. АЛЕ. Номер сектора передається в 16-розрядному регістрі DX.
Питання. Чи є альтернатива цим функціям, що дозволяє передавати номер сектора більше 65535 (напр. 32 розрядами)?
як то робив за допомогою vwin32.vxd - дивився які файли відкриті на опр. диску і дізнавався які номери кластерів вони займають, але під NT це непойдет. струму під 9х, під XP нетестіл. можу кинути приклад
Vcoder
Ок, буду пробувати Reset "ом.
А BlockWrite тут, по-моєму, теж можна використовувати?
З.И.Немного не зрозумів твоє міркування з приводу аси: при чому тут діал ап? У мене діал ап, як і у більшості користувачів ICQ.
І нічого. Може ти боїшся що весь час буде йти на розмови?
[NIKEL]
Якщо не важко то кинь на [email protected]
кинув, струму я на Builder`e пишу :) але я думяю ти розберешся
Vcoder, я сказав "перепиши", а не "скопируй".
[NIKEL]
Кинь будь ласка ще раз на [email protected]
Че то не прийшло.