asker
|
|
« : 03-02-2007 08:11 » |
|
В принципе название темы отображает и вопрос.
Т.е. наверняка есть какие-то WinAPI-функции, которые говорят об этом.
И еще параллельно вопрос: Как узнать список использованных областей, которые находятся после конца заданного файла.
Я пробовал искать, но тщетно. В MSDN начал с FindFirstFile, но он ищет заданный файл на диске, но не говорит последний ли он на диске (физически). Например для того,чтобы сказать можно ли разбить логический диск на 2 диска.
Если я не понятно объяснил, извините. Попробую исправиться в дальнейшем.
Подскажите, пожалуйста.
|
|
|
Записан
|
С уважением, asker
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 03-02-2007 08:14 » |
|
asker, Что ты подрузомеваещ под словом "последний"? Если последний в каталоге, это не значит, что он будет размешен на диске в самых дальних секторах.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
asker
|
|
« Ответ #2 : 03-02-2007 09:56 » |
|
Finch, имеется в виду не последний в каталоге, а как раз в самых дальних секторах. Например, чтобы можно было разбить логический диск на 2 диска. Допустим нельзя же разделить логический диск на 2, если часть какого-то файла или сам файл расположен в той части диска, которую я хочу отделить.
|
|
|
Записан
|
С уважением, asker
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #3 : 03-02-2007 10:03 » |
|
Ну тогда для этого тебе придется разбираться с файловой системой напрямую. Для юзер режима не имеет значение, где точно лежит файл. Поэтому скорее всего и нет функций. Нужно кстати также определится, какая файловая система стоит на диске (FAT, NTFS, .........). Если для FAT практически все просто. То NTFS полузакрытый стандарт. Кстати, как я слышал, скоро в стане Виндовс появится новый стандарт вместе с Vista. Это тебе нужно для познавания мира компьтера. Или для работы. Если второе, то практичнее это сделать с помошью уже написанных утилит
|
|
« Последнее редактирование: 03-02-2007 10:06 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
asker
|
|
« Ответ #4 : 03-02-2007 10:44 » |
|
Нет. Это не 1-ое и не 2-ое. Ближе к первому. Готовлюс к ГОСАМ. Врятли надо напрямую обращаться, слишком сложно для ГОСОВ, да и рисковано, очень. Может правдо я задание не понял, но я практически переписал его (часть конечно)
|
|
|
Записан
|
С уважением, asker
|
|
|
RXL
|
|
« Ответ #5 : 03-02-2007 10:48 » |
|
asker, да-да - не мучь себя. Существует такая программка, как Partitional Magic, которая сделаеь все необходимое сама. В т.ч. и разобъет раздел на два без потери данных.
А, вот в чем дело. У тебя определены условия, что, как и где?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
asker
|
|
« Ответ #6 : 03-02-2007 10:52 » |
|
RXL, что ты имел в виду "У тебя определены условия, что, как и где?"
|
|
|
Записан
|
С уважением, asker
|
|
|
asker
|
|
« Ответ #7 : 03-02-2007 10:55 » |
|
RXL, Передо мной не будет стоять задача воспользоваться готовым решением (Partitional Magic), а надо написать прогу (не такую конечно, и даже близко). Но просто за предыдущие годы такое задание было, значит над ним надо подумать, вот я уже целый день думаю, но пока не преблизился (на мой взгляд).
|
|
|
Записан
|
С уважением, asker
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #8 : 03-02-2007 11:04 » |
|
Ну под виндой, особенно XP такое в юзер режиме не сделаеш. Нужно заходить в кернел режим. Если ДОС и ему подобное. Тогда намного легче. В БИОС функциях есть прямой доступ к секторам диска. Но в любом случае тебе придется в начале разбираться с файловой системой. Как она размешает информацию по секторам диска.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
|
|
« Ответ #9 : 03-02-2007 11:08 » |
|
"Что, как и где" - это условия, в которых должна работать программа и требования к ней. Иначе говоря, тех.задание. Напр., ОС, файловая система, какие ф-ии должна выполнять, какой интерфейс иметь.
Логика работы примерно такая: 1. Перенести физически все файлы, которые покадают в область, которую нужно отделить, в область, которая останется на диске. 2. Совершить некоторые манипуляции с перенастройкой файловой ситемы, чтоб ее уменьшить. 3. Изменить таблицу разделов: умньшить существующий раздел и создать новый. 4. Создать в новом разделе файловую систему.
Реализация зависима от ОС и FS.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
asker
|
|
« Ответ #10 : 03-02-2007 13:20 » |
|
После всех рассуждений, наверное имелось в виду что ОС - DOS, задания 2004-2005 годов, а может и более ранние.
Finch, а как перейти в kernel режим?
RXL, насколько я понял - это примерный алгоритм разделения диска на 2. Такая задача не поставлена, я просто привел пример, где может понадобиться задача, которую я описал. Т.е. это как пред-задача.
А так спасибо, Finch, RXL.
|
|
|
Записан
|
С уважением, asker
|
|
|
RXL
|
|
« Ответ #11 : 03-02-2007 16:21 » |
|
asker, если дополнять задачу самостоятельно допустимо, то лучше остановить на MSDOS и FAT. Никакого кернеля у него нет - ОС простая. К слову, в режим кернеля не переходят - это драйвера в этом режиме исполняются.
Ищи описания доступа к диску в DOS (это будут ф-ии BIOS - int 13h), FAT и таблицы разделов. Переносить файлы в FAT очень просто: копируешь кластер на свободное место и подправляешь таблицу FAT. После всех исправлений нужно скопировать изменения FAT во вторую таблицу (для разделов на жестком диске их обычно две создают), исправить размер таблицы FAT и изменить размер раздела в таблице разделов. Далее надо рестартовать систему, т.к. DOS не воспринимает изменений в числе и размерах разделов.
Для экспериментов рекомендую воспользоваться виртуальной машиной (VMware, DOS-Box, VirtualPC).
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
asker
|
|
« Ответ #12 : 05-02-2007 07:30 » |
|
RXL, спасибо. Может быть (надеюсь) попробую после ГОСОВ, а может быть и щас посмотрю Юрова Assembler. Еще раз спасибо.
|
|
|
Записан
|
С уважением, asker
|
|
|
|