Показване на файлове в страницата с памет

Сайт на Delphi: ежедневни Delphi-новини, документация, статии, преглед, интервю, компютърен хумор.

Четенето и писането на файлове чрез стандартни методи не винаги е удобно. В много случаи трябва първо да заредите файла в паметта и едва след това да го използвате. Това отнема много време и би било хубаво да можете веднага да третирате файла по същия начин като паметта. В крайна сметка операционната система може да го направи. Класическият пример е swap файлът, с който операционната система работи по същия начин, както с RAM.

Моята книга "The Delphi* Bible" (вече се позовах на тази работа няколко пъти) описва функциите, които използвах за показване на звукови файлове в паметта, но те са описани по доста повърхностен начин за тези функции. Сега ще ги разгледаме по-подробно. За нашия пример са ни необходими само три компонента:

Списък 4-20 показва примерен код за показване на файл в паметта и четене на първите му два байта.

Списък 4.20. Пример за показване и четене на файл

Първо трябва да отворим файла с някаква класическа функция, за да получим идентификатора на файла. Например, можете да използвате функцията CreateFile, за да направите това:

Нека си припомним какви параметри трябва да приема тази функция.

Име на файл. В нашия случай ще получим името чрез стандартния прозорец за отваряне на файл: OpenDialogl.

M Опции за достъп до файл: GENERIC_READ (четене) и/или GENERIC_WRITE (запис). По принцип няма да извикваме функциите за четене и запис на файла, защото се интересуваме само от ID, но разреших достъп за четене. Защо? Ако даден файл е отворен само за четене, той може да бъде показан в паметта като само за четене. Ако погледнете помощния файл, тогава това не е изявление, но MS препоръчва да следвате това правило.

Опции за споделяне. В този пример се използва плъгинът FILE_SHARE_READ. Това означава, че ако друго приложение поиска файл за четене, операцията ще бъде успешна, но файлът няма да бъде отворен за запис.

Указател към структура SECURITYATTRIBUTES. Ако тази структура е попълнена, тогава тя определя как дъщерните процеси могат да наследяват идентификатора. Не е необходимо да наследяваме, така че този параметър е нула.