Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.10;
Скачать: CL | DM;

Вниз

Определение расположения файла на диске (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
15-1254334797
Kerk
2009-09-30 22:19
2010.01.10
MySQL разность дат в днях


2-1255952617
defen
2009-10-19 15:43
2010.01.10
запрет на закрытие программы или запустить как системный ресурс


2-1258546185
Никита7
2009-11-18 15:09
2010.01.10
Как использовать Zlib в своей программе?


15-1257526923
Avant Browsr
2009-11-06 20:02
2010.01.10
Где хранятся "Избранное" и "Журнал"?


2-1258478697
ℓoℓ
2009-11-17 20:24
2010.01.10
Получение сообщения о нажатии клавищи