Файлы в оперативной памяти
От: Alfred  
Дата: 27.11.02 06:51
Оценка:
Подскажите, пожалуйста, что делать, если надо создать файл в оперативной памяти, заполнить его данными, работать с ним как с обычным файлом, обращаться к нему, в том числе, с помощью функции LoadFromFile из стандартного объекта.
Мне товарищи подсказали, спасибо им,следующий код:
MemHnd := CreateFileMapping(HWND($FFFFFFFF),nil,PAGE_READWRITE,0,MemFileSize,MemFileName);
Дальше я попытался,читая help'ы Windows SDK, по аналогии написать следующий нехитрый код.

procedure TForm1.SpeedButton1Click(Sender: TObject);
Const
MemFileSize = 1024;
MemFileName = 'T.t';
var
MemHnd : HWND;
bl: Boolean;
buf: Shortint;
i: Integer;
q: Cardinal;
begin
MemHnd := CreateFileMapping(HWND($FFFFFFFF),
nil,PAGE_READWRITE,0,MemFileSize,MemFileName);
ShowMessage(IntToStr(MemHnd));

bl := false;
MemHnd := OpenFileMapping(FILE_MAP_WRITE,bl,MemFileName);
for i := 1 to 10 do
begin
Buf := i;
q := i;
WriteFile(MemHnd,Buf,1,q,nil);

end;
OpenFileMapping(FILE_MAP_READ,bl,MemFileName);
for i := 1 to 10 do
begin
q := i;
ReadFile(MemHnd,Buf,1,q,nil);
ShowMessage(IntToStr(buf));
end;

CloseHandle(MemHnd);
MemHnd := NULL;

end;

В результате, при инсталяции появляется предупреждение:
[Hint] Unit1.pas(56): Value assigned to 'MemHnd' never used
В файле, если он создался, похоже ничего нет.
Может быть подскажете, что не так сделал?
И можно ли такой файл читать функцией LoadFromFile?
Re: Файлы в оперативной памяти
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 27.11.02 06:59
Оценка:
Здравствуйте, Alfred, Вы писали:

A>Подскажите, пожалуйста, что делать, если надо создать файл в оперативной памяти, заполнить его данными, работать с ним как с обычным файлом, обращаться к нему, в том числе, с помощью функции LoadFromFile из стандартного объекта.

A>Мне товарищи подсказали, спасибо им,

неправильно посоветовали, File Mapping — это чтобы с файлом работать как с памятью, а тебе надо с памятью как с файлом, т.е. наоборот
Re: Файлы в оперативной памяти
От: jhfrek Россия  
Дата: 27.11.02 08:03
Оценка:
Здравствуйте, Alfred, Вы писали:

A>Подскажите, пожалуйста, что делать, если надо создать файл в оперативной памяти, заполнить его данными, работать с ним как с обычным файлом, обращаться к нему, в том числе, с помощью функции LoadFromFile из стандартного объекта.


Тебе нужен TMemoryStream и функция LoadFromStream

See Help topic "Using file streams"
Re: Файлы в оперативной памяти
От: Slaveniya Беларусь  
Дата: 27.11.02 09:48
Оценка:
Здравствуйте, Alfred, Вы писали:
...
A> OpenFileMapping(FILE_MAP_READ,bl,MemFileName);
A> for i := 1 to 10 do
A> begin
A> q := i;
A> ReadFile(MemHnd,Buf,1,q,nil);
A> ShowMessage(IntToStr(buf));
A> end;

A> CloseHandle(MemHnd);

A> MemHnd := NULL;

A>end;


A>В результате, при инсталяции появляется предупреждение:

A>[Hint] Unit1.pas(56): Value assigned to 'MemHnd' never used

... а хинт появляется потому как строчка MemHnd := NULL; не нужна!
All the best.
------------------------
Slaveniya (vvh@narod.ru)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.