• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Асинхронное чтение данных из файла

  • Автор темы Автор темы slavon-x86
  • Дата начала Дата начала
S

slavon-x86

Пишу HTTP сервер и столкнулся со следующей проблемой:
Получается что к примеру User1 загружает файл 1.rar и пока он не загрузит этот файл, то User2 не сможет его загрузить.

Код:
AssignFile(f);
....
CloseFile(f);


Сразу в голову приходят 2 способа:
1. Загрузить файлы полностью в оперативу, однако если будут многообьёмные файлы, то оперативы не хватит
2. Читать по кускам, однако этот способ мне неособо нравиться

Код:
Repeat 
AssignFile(f);
....
читаем кусок файла
....
CloseFile(f);
.....
отправляем считанный кусок
Until

Или может есть ещё какие-нибудь способы ?
 
Код:
f := TFileStream.Create(Request.Line.Path, fmOpenRead);
Так не работает...
Когда он грузиться с одного потока, то второму он не доступен.
 
Ура нашёл ! fmShareDenyNone - параметр, не блокирующий доступ к файлу.
Код:
 f := TFileStream.Create('Load' + Request.Line.Path,
fmOpenRead + fmShareDenyNone);
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab