Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.004 c
4-1226015472
Eraser
2008-11-07 02:51
2010.01.10
Проверка подлинности сервера


2-1258470387
Pascal96
2009-11-17 18:06
2010.01.10
Задача на сортировку.


10-1162211576
Max Ivanych
2006-10-30 15:32
2010.01.10
Защита диапазона ячеек в Excel


1-1232792338
Михаил
2009-01-24 13:18
2010.01.10
TSaveDialog запрос на замену файла?


2-1258642049
Phoenix77
2009-11-19 17:47
2010.01.10
Сервисы (Службы)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский