Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2010, 19:45   #1
Sancho$
Новичок
Джуниор
 
Регистрация: 06.07.2010
Сообщений: 3
Сообщение Чтение файла с CD/DVD

пишу программу что-то типа имитация работы CD/DVD привода. Для этого по нажатии кнопки считываю данные из файла на диске. А при повторном нажатии -прекращаю.
Вот кусок простого кода,в котором происходит чтение данных их файла до тех пор, пока пользователь не нажмет отмену.
Цитата:
repeat
f_handle:=fileopen(form2.Edit11.Tex t,fmOpenRead);
for i := 1 to sizef do
begin
if test then fileread(f_handle,buffer,1024)
else break;
end;
fileclose(f_handle);
until test=false;
код работает отлично, но после того как программа первый раз считает весь файл целиком,во второй и последующие разы обращения к приводу не происходит. Похоже винда просто сохраняет файл в кэш и при последующих циклах берет его оттуда. Подскажите пожалуйста, как обойти эту проблему? каждый раз должно происходить чтение именно с привода, а не из памяти. увеличение размера файла на диске не помогает, так как ОЗУ на компе достаточно.
Sancho$ вне форума Ответить с цитированием
Старый 06.07.2010, 19:48   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если файл не изменился то он берется с кэша если он там есть.
зачем понижать производительность? и обходить кэширование?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.07.2010, 20:00   #3
Sancho$
Новичок
Джуниор
 
Регистрация: 06.07.2010
Сообщений: 3
По умолчанию

Все верно говорите.
но вот есть такая задача,имитировать работу привода предположим в течение получаса. привод работает - это значит либо с него читается инфа,либо диск прожигается. последний вариант не рассматриваем.значит нужно заставить привод циклически читать какие-то данные.
может как-то можно очищать этот кеш программно? или выделить для хранения данных программы строго определенное место в памяти?
Sancho$ вне форума Ответить с цитированием
Старый 06.07.2010, 21:27   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если надо именно имитировать, то может читать диск бинарно?(не на уровне ФС, а на уровне носителя)
данные правда вы врятли полезные так прочтете, но врятли там кэш будет.
делаем через CreateFile.
Цитата:
Disk Devices
Windows NT: You can use the CreateFile function to open a disk drive or a partition on a disk drive. The function returns a handle to the disk device; that handle can be used with the DeviceIOControl function. The following requirements must be met in order for such a call to succeed:

· The caller must have administrative privileges for the operation to succeed on a hard disk drive.
· The lpFileName string should be of the form \\.\PHYSICALDRIVEx to open the hard disk x. Hard disk numbers start at zero. For example:

String Meaning
\\.\PHYSICALDRIVE2 Obtains a handle to the third physical drive on the user's computer.


· The lpFileName string should be \\.\x: to open a floppy drive x or a partition x on a hard disk. For example:

String Meaning
\\.\A: Obtains a handle to drive A on the user's computer.
\\.\C: Obtains a handle to drive C on the user's computer.


Windows 95: This technique does not work for opening a logical drive. In Windows 95, specifying a string in this form causes CreateFile to return an error.

· The dwCreationDistribution parameter must have the OPEN_EXISTING value.
· When opening a floppy disk or a partition on a hard disk, you must set the FILE_SHARE_WRITE flag in the dwShareMode parameter.
вот описание именно этого момента.(на русском нет, мне не нужно)
остальное легко найдете в инете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.07.2010, 21:55   #5
Sancho$
Новичок
Джуниор
 
Регистрация: 06.07.2010
Сообщений: 3
По умолчанию

Интересная мысль. спасибо! попробую и отпишусь.
данные как раз никакие и не нужны, так что может сработать.
Sancho$ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать DVD (VIDEO_TS папку на DVD диск) Altera Софт 14 30.03.2013 21:05
Запись большого файла на 2-ва DVD Rembo Софт 32 14.02.2009 16:02
чтение из файла Илья500 Общие вопросы C/C++ 26 05.12.2008 00:37
Чтение файла [Smarik] Помощь студентам 8 28.04.2008 22:15
Чтение из файла... Bill Gates Общие вопросы Delphi 3 22.03.2008 22:13