Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Вниз

Можно ли узнать кластер ...   Найти похожие ветки 

 
#Deus   (2002-12-07 17:32) [0]

Можно ли узнать кластер(ы)(или как там называются места где физически расположены файлы(в смысле на HDD)) на котором записан какой-либо файл?
Если да, то как?
Заранее спасибо!


 
Vcoder   (2002-12-07 18:05) [1]

Кластер - это логическая единица мнформации на винте. Каждый файл занимает целое число кластеров, но последний кластер может быть использован не полностью. Так возникают кластерные потери. Чем меньше размер кластера, тем меньше возможная разница между его размером и его заполненной частью - тем меньше кластерные потери. Но больше размер ФАТ.

Физическая единица информации на винте - сектор. Он почти всегда (кроме редких особых случаев) равен 512 байт. Несколько секторов (целое число, равное или большее 1) составляют кластер.

Немного об организации системы ФАТ.
Вообще таблица ФАТ представляет набор 16- или 32-битных (отсюда ФАТ-16 и ФАТ-32, на дискете вообще ФАТ-12) записей, количество которых равно количеству кластеров на диске.
В записи каталога на каждый файл хранится номер кластера, в котором лежит начало файла. В элементе ФАТ с ЭТИМ номером хранится номер следующего кластера, либо специальный код, означающий, что это последний кластер этого файла. И так далее. Благодаря такой организации файл может быть как угодно раскидан по диску, но ОС всегда сможет прочитать его от начала до конца. А вот если ФАТ накроется... Считай, что инфа с винта потеряна.

Итак.
Если тебе нужен номер кластера, с которого начинается файл, смотришь соотв. запись каталога. Как посмотреть каталог... вот это я не знаю, может и есть функция в Дельфях...
Если нужен номер сектора, умножаешь номер кластера на размер кластера в секторах и прибавляешь начальный сектор файловой системы.

Инфа о размере кластера, номере сектора начала файлов и т.п. находится в секторе с ЛОГИЧЕСКИМ номером 0 (ноль).

ЗЫ. А зачем тебе это, может можно проще сделать? Я тоже в свое время хотел написать прогу для посекторного сохранения винта, но потом бросил...


 
#Deus   (2002-12-07 18:51) [2]

Vcoder спасибо за справку!
Идея такая :сделать Wiper,но как ты понимаешь для невозможности восстановления инфы нужно что-нибудь записать на место этого файла ... А чтобы записать на его место что-нибудь, надо это место знать(на физическом носителе)... Скорее всего оптимальным(а возможно и единственным) вариантом будет узнать номер(а) кластера(ов) на которых файл был записан...А потом на эти кластеры записать какую-нибудь муть...
Если у тебя есть Ася-стучись 2444094


 
Sha   (2002-12-07 20:23) [3]

Просто перепиши файл на месте, а потом удали его.


 
Vcoder   (2002-12-07 21:54) [4]


> Sha © (07.12.02 20:23)
> Просто перепиши файл на месте, а потом удали его.

Ан нет! Не факт, что новый файл, скопированный поверх старого, запишется в те же сектора.

Открываешь файл процедурой Reset и записываешь в него что душа пожелает. Количеством в размер файла или чуть больше. А потом удаляешь. Это сработает.


#Deus © (07.12.02 18:51)
Если у тебя есть Ася-стучись 2444094

Спасибо за предложение. Но у меня Диал-Ап... Сам понимаешь: время=деньги. Посему Асю не завожу, хотя знаю, какая это удобная вещь. А если будет ответ на мой следующий вопрос, считай что задача твой решена. Потому что остальное - дело техники. Т.е. программеров и компов.

Итак. Вопрос Мастерам:
В ДОС-е есть прерывания int 25h и int 26h: соотв. чтение/запись логических секторов. НО. Номер сектора передается в 16-разрядном регистре DX.
Вопрос: Есть ли альтернатива этим функциям, позволяющая передавать номер сектора больше 65535 (напр., 32 разрядами)?


 
[NIKEL]   (2002-12-07 22:02) [5]

как то делал с помощью vwin32.vxd - смотрел какие файлы открыты на опр. диске и узнавал какие номера кластеров они занимают, но под NT это непойдет... тока под 9х, под XP нетестил... могу кинуть пример


 
#Deus   (2002-12-07 22:30) [6]

Vcoder
Ок, буду пробовать Reset"ом...
А BlockWrite тут, помоему, тоже можно использовать?
З.Ы.Немного не понял твое рассуждение по поводу аси: при чем тут диал ап?У меня диал ап, как и у большинства пользователей ICQ...
И ничего... Может ты боишся что все время будет уходить на разговоры?

[NIKEL]
Если не трудно то кинь на nazarov@tele-kom.ru


 
[NIKEL]   (2002-12-07 23:53) [7]

кинул, тока я на Builder`e пишу :) но я думяю ты разберешся


 
Sha   (2002-12-07 23:59) [8]

Vcoder, я сказал "перепиши", а не "скопируй".


 
#Deus   (2002-12-08 10:13) [9]

[NIKEL]
Кинь пожалуйста еще раз на -deus-@mail.ru
Че то не пришло...


 
Vcoder   (2002-12-08 11:50) [10]


> #Deus © (07.12.02 22:30)
> Vcoder
> Ок, буду пробовать Reset"ом...
> А BlockWrite тут, помоему, тоже можно использовать?

Именно о нем и речь.


> #Deus © (07.12.02 22:30)
> Vcoder
> Может ты боишся что все время будет уходить
> на разговоры?

Именно так. Потому и не ставлю Асю. Но когда-нибудь обязательно поставлю.


> Sha © (07.12.02 23:59)
> Vcoder, я сказал "перепиши", а не "скопируй".

Sorry, не так понял...


 
[NIKEL]   (2002-12-09 10:39) [11]

#Deus © (08.12.02 10:13)
[NIKEL]
Кинь пожалуйста еще раз на -deus-@mail.ru
Че то не пришло...

->
ок кину еще раз



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
1-38159
Suharew
2003-02-04 14:46
2003.02.13
Помогите ПОЖАЛУЙСТА -- Label


1-38231
SergeyP_2000
2003-02-05 12:00
2003.02.13
COM


4-38632
alvin
2003-01-01 16:33
2003.02.13
CreateThread


3-38122
Raids
2003-01-22 20:54
2003.02.13
Сколь машин поддерживает бесплатный IB6?


3-38053
wHammer
2003-01-29 10:37
2003.02.13
Сортировка по возрастанию && сортировка по убыванию!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский