Форум: "Начинающим";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];
ВнизОпределение расположения файла на диске (CD|DVD) Найти похожие ветки
← →
abun © (2009-11-15 12:34) [0]Как определить расположение файла на диске CD или DVD?
Чтобы потом можно было воспользоваться кодом:
// Перемещаем указатель на нужный сектор:
SetFilePointer (h, pos, nil, FILE_BEGIN);
// Читаем сектор в буфер:
ReadFile (h, Buffer, bufsize, tmp, nil);
Т.е. нужно указать значение Pos:cardinal;
Как его найти?
← →
Плохиш © (2009-11-15 13:03) [1]
> // Перемещаем указатель на нужный сектор:
> SetFilePointer (h, pos, nil, FILE_BEGIN);
Интересно, и какой из передаваемых параметров, по вашему, является "нужным сектором"?
← →
abun © (2009-11-15 13:35) [2]
> > // Перемещаем указатель на нужный сектор:> SetFilePointer
> (h, pos, nil, FILE_BEGIN);Интересно, и какой из передаваемых
> параметров, по вашему, является "нужным сектором"?
Я чет не понял? Меня подловить хочешь или как?
Да, в переменной Pos значение указывается в байтах. Т.е. если я буду знать адрес нужного сектора, то адрес надо умножить на количество байт в секторе. Это очевидно.
Господа, попрошу без лишних обсуждений. Если есть ответ или совет, или подсказка какая-либо, то прошу!
← →
Юрий Зотов © (2009-11-15 14:30) [3]> abun © (15.11.09 12:34)
> Как определить расположение файла на диске CD или DVD?
Уточните - что имеется в виду под термином "расположение файла"?
← →
0x00FF00 (2009-11-15 15:06) [4]abun,
Сдаётся мне, Вы что-то путаете.
Таким способом нельзя читать носитель посекторно.
Предназначение вышеуказанного SetFilePointer — указать позицию чтения/записи УЖЕ в файле, т.е. в некоей логической сущности, не привязанной к носителю информации.
← →
Anatoly Podgoretsky © (2009-11-15 15:57) [5]> abun (15.11.2009 13:35:02) [2]
Вряд ли это получится, пока тема открыта каждый имеет право писать в нее, тебе видимо надо в платную службу подержки.
← →
brother © (2009-11-16 07:41) [6]> Т.е. если я буду знать адрес нужного сектора, то адрес надо
> умножить на количество байт в секторе.
вообще этого не достаточно ибо:
1. файл может быть фрагментирован, а доступ идет в обход ФС
2. этот код справедлив для любых носителей
3. как файл откываешь?
DiskString := Format ("\\.\PHYSICALDRIVE%s",[IntToStr(x)]);
// x -- номер привода
или
DiskString := Format ("\\.\%s",[DrCh+":"]);
// DrCh -- Буква логического диска... если нужно читать по файловой системе
4. задача какая?
← →
brother © (2009-11-16 07:50) [7]посмотри тут:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=5
там последние мои ссылки и ты поймешь, что в том случае открывается файл на чтеие байт и ты должен:
прочитав структуру ФС выявить с какого по какой сектора расположен нужный тебе файл, а структура ФС это уже другое...
← →
Leonid Troyanovsky © (2009-11-16 10:05) [8]
> brother © (16.11.09 07:50) [7]
> прочитав структуру ФС выявить с какого по какой сектора
> расположен нужный тебе файл,
Файл не обязан располагаться последовательно.
> abun © (15.11.09 12:34)
> Как его найти?
Бессмысленное действо.
Сейчас он там, а через пару колов времени его уже нет.
--
Regards, LVT.
← →
brother © (2009-11-16 10:30) [9]> Файл не обязан располагаться последовательно.
дык я об этом же:
> 1. файл может быть фрагментирован, а доступ идет в обход
> ФС
просто, если прочитать по фат: сколько фрагментов и где ;)
← →
RWolf © (2009-11-16 10:40) [10]
> Сейчас он там, а через пару колов времени его уже нет.
ну, на CD/DVD-то он всегда будет там, куда положили.
← →
abun © (2009-11-16 14:08) [11]Какая фрагментация на CD или DVD???
Там очевидно идет последовательное чтение-запись.
> brother © (16.11.09 07:50) [7]
> посмотри тут:http://www.delphimaster.ru/cgi-bin/forum.pl?
> n=5там последние мои ссылки и ты поймешь, что в том случае
> открывается файл на чтеие байт и ты должен:прочитав структуру
> ФС выявить с какого по какой сектора расположен нужный тебе
> файл, а структура ФС это уже другое...
Перерыл всю тему, ничего толкового не нашел - потратил только битый час!!!
> Anatoly Podgoretsky © (15.11.09 15:57) [5]
> > abun (15.11.2009 13:35:02) [2]Вряд ли это получится,
> пока тема открыта каждый имеет право писать в нее, тебе
> видимо надо в платную службу подержки.
Какую службу поддержки? Куда и почему?
← →
abun © (2009-11-16 14:12) [12]
> brother © (16.11.09 07:41) [6]
> > Т.е. если я буду знать адрес нужного сектора, то адрес
> надо > умножить на количество байт в секторе.вообще этого
> не достаточно ибо:1. файл может быть фрагментирован, а доступ
> идет в обход ФС2. этот код справедлив для любых носителей3.
> как файл откываешь? DiskString := Format ("\\.\PHYSICALDRIVE%s",
> [IntToStr(x)]); // x -- номер привода или DiskString :=
> Format ("\\.\%s",[DrCh+":"]);// DrCh -- Буква логического
> диска... если нужно читать по файловой системе4. задача
> какая?
Может, я чет не понимаю, но я понимаю так: что PHYSICALDRIVE - это типо если в системе установлены 2 или больше приводов (HDD или CD-Rom), и обращение идет именно к одному из них. А второй вариант - по имени логического диска - я его и использую. Кстати, для CDROM, как я понимаю, оба варианта должны быть, в принципе, одинаково работоспособны.
← →
brother © (2009-11-17 05:00) [13]> Перерыл всю тему, ничего толкового не нашел - потратил только
> битый час!!!
мои последние ссылки...
> что PHYSICALDRIVE - это типо если в системе установлены
> 2 или больше приводов (HDD или CD-Rom),
нет, это физическая железка (HDD0, HDD1, DVD0, DVD1 ...)
> А второй вариант - по имени логического диска - я его и
> использую
да по имени диска...
НО: все эти манипуляции приводяк к тому, что устройство открывается как один большой файл и доступ идет в обход файловой системы, не знаю, можно ли прочитать сектора ФС черезDiskString := Format ("\\.\%s",[DrCh+":"]),
но черезDiskString := Format ("\\.\PHYSICALDRIVE%s", [IntToStr(x)]);
их можно точно прочитать, и MBR тоже...
твоя задача:
1. прочитать ФС побайтно (а для этого надо знать структуру ФС и где она физически расположена на носителе)
2. найти все вхождения в ней интересующего тебя файла (вот там ты и узнаешь, с какого по какой сектор расположен интересующий тебя файл, есть ли фрагментация итд итп.)
3. как помню: для CD, DVD используется CDFS файловая система, на счет ее фрагментации - не знаю, скорее всего нет...
имхо, сложная тема для тебя... но: удачи!
зы ты так и не сказал зачем это нужно? может всеж на уровне ФС можно решить задачу?
← →
Юрий Зотов © (2009-11-17 08:20) [14]Тут даже дело не в том, на каком уровне (логическом или физическом) требуется доступ. Дело тут в самом принципе. Если вникнуть в суть вопроса, то она сводится к следующему - как узнать позицию, на которую нужно установить указатель записи/чтения?
Ответ очевиден - или никак, или исходя из какой-то дополнительной информации (которую автор вопроса не сообщает, а может и не имеет).
← →
brother © (2009-11-17 09:01) [15]> а может и не имеет).
имхо так, ибо сабж явно на это указывает
← →
Riply © (2009-11-17 09:36) [16]> [0] abun © (15.11.09 12:34)
> Как его найти?
IMHO, самый простой вариант попробовать через: ZwQueryInformationFile(..., FileInternalInformation)
Но и в нем есть пара подводных камней, типа возврата "не совсем настоящего значения" :)
← →
brother © (2009-11-17 11:52) [17]http://delphimaster.net/view/4-1254377124/
9 пост ;)
Рипли нравится тема))))))))
← →
abun © (2009-11-17 14:58) [18]кул-инфа по теме: http://wasm.ru/article.php?article=lockfileswork
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.10;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.25 c