Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как выяснить является ли файл последним на диске?  (Прочитано 11267 раз)
0 Пользователей и 1 Гость смотрят эту тему.
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« : 03-02-2007 08:11 » 

В принципе название темы отображает и вопрос.

Т.е. наверняка есть какие-то WinAPI-функции, которые говорят об этом.

И еще параллельно вопрос:
Как узнать список использованных областей, которые находятся после конца заданного файла.

Я пробовал искать, но тщетно. В MSDN начал с FindFirstFile, но он ищет заданный файл на диске, но не говорит последний ли он на диске (физически). Например для того,чтобы сказать можно ли разбить логический диск на 2 диска.

Если я не понятно объяснил, извините. Попробую исправиться в дальнейшем.

Подскажите, пожалуйста.
Записан

С уважением, asker
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 03-02-2007 08:14 » 

asker, Что ты подрузомеваещ под словом "последний"?
Если последний в каталоге, это не значит, что он будет размешен на диске в самых дальних секторах.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 03-02-2007 09:56 » 

Finch, имеется в виду не последний в каталоге, а как раз в самых дальних секторах.
Например, чтобы можно было разбить логический диск на 2 диска.
Допустим нельзя же разделить логический диск на 2, если часть какого-то файла или сам файл расположен в той части диска, которую я хочу отделить.
Записан

С уважением, asker
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 03-02-2007 10:03 » 

Ну тогда для этого тебе придется разбираться с файловой системой напрямую. Для юзер режима не имеет значение, где точно лежит файл. Поэтому скорее всего и нет функций.

Нужно кстати также определится, какая файловая система стоит на диске (FAT, NTFS, .........). Если для FAT практически все просто. То NTFS полузакрытый стандарт. Кстати, как я слышал, скоро в стане Виндовс появится новый стандарт вместе с Vista.

Это тебе нужно для познавания мира компьтера. Или для работы. Если второе, то практичнее это сделать с помошью уже написанных утилит Улыбаюсь
« Последнее редактирование: 03-02-2007 10:06 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 03-02-2007 10:44 » 

Нет. Это не 1-ое и не 2-ое. Ближе к первому.
Готовлюс к ГОСАМ.
Врятли надо напрямую обращаться, слишком сложно для ГОСОВ, да и рисковано, очень.
Может правдо я задание не понял, но я практически переписал его (часть конечно)
Записан

С уважением, asker
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 03-02-2007 10:48 » 

asker, да-да - не мучь себя. Существует такая программка, как Partitional Magic, которая сделаеь все необходимое сама. В т.ч. и разобъет раздел на два без потери данных.


А, вот в чем дело.
У тебя определены условия, что, как и где?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 03-02-2007 10:52 » 

RXL, что ты имел в виду "У тебя определены условия, что, как и где?"
Записан

С уважением, asker
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 03-02-2007 10:55 » 

RXL, Передо мной не будет стоять задача воспользоваться готовым решением (Partitional Magic), а надо написать прогу (не такую конечно, и даже близко). Но просто за предыдущие годы такое задание было, значит над ним надо подумать, вот я уже целый день думаю, но пока не преблизился (на мой взгляд).
Записан

С уважением, asker
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #8 : 03-02-2007 11:04 » 

Ну под виндой, особенно XP такое в юзер режиме не сделаеш. Нужно заходить в кернел режим. Если ДОС и ему подобное. Тогда намного легче. В БИОС функциях есть прямой доступ к секторам диска. Но в любом случае тебе придется в начале разбираться с файловой системой. Как она размешает информацию по секторам диска.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 03-02-2007 11:08 » 

"Что, как и где" - это условия, в которых должна работать программа и требования к ней. Иначе говоря, тех.задание.
Напр., ОС, файловая система, какие ф-ии должна выполнять, какой интерфейс иметь.

Логика работы примерно такая:
1. Перенести физически все файлы, которые покадают в область, которую нужно отделить, в область, которая останется на диске.
2. Совершить некоторые манипуляции с перенастройкой файловой ситемы, чтоб ее уменьшить.
3. Изменить таблицу разделов: умньшить существующий раздел и создать новый.
4. Создать в новом разделе файловую систему.

Реализация зависима от ОС и FS.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 03-02-2007 13:20 » 

После всех рассуждений, наверное имелось в виду что ОС - DOS, задания 2004-2005 годов, а может и более ранние.

Finch, а как перейти в kernel режим?

RXL, насколько я понял - это примерный алгоритм разделения диска на 2. Такая задача не поставлена, я просто привел пример, где может понадобиться задача, которую я описал. Т.е. это как пред-задача.

А так спасибо, Finch, RXL.
Записан

С уважением, asker
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 03-02-2007 16:21 » 

asker, если дополнять задачу самостоятельно допустимо, то лучше остановить на MSDOS и FAT. Никакого кернеля у него нет - ОС простая. К слову, в режим кернеля не переходят - это драйвера в этом режиме исполняются.

Ищи описания доступа к диску в DOS (это будут ф-ии BIOS - int 13h), FAT и таблицы разделов.
Переносить файлы в FAT очень просто: копируешь кластер на свободное место и подправляешь таблицу FAT. После всех исправлений нужно скопировать изменения FAT во вторую таблицу (для разделов на жестком диске их обычно две создают), исправить размер таблицы FAT и изменить размер раздела в таблице разделов. Далее надо рестартовать систему, т.к. DOS не воспринимает изменений в числе и размерах разделов.

Для экспериментов рекомендую воспользоваться виртуальной машиной (VMware, DOS-Box, VirtualPC).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
asker
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 05-02-2007 07:30 » new

RXL, спасибо. Может быть (надеюсь) попробую после ГОСОВ, а может быть и щас посмотрю Юрова Assembler. Еще раз спасибо.
Записан

С уважением, asker
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines