Вниз
Скачать: CL | DM;

Проецируемые в память файлы   Найти похожие ветки 

← →
The Scorpion   (2004-11-18 20:54) [0]

При замене строчки в файле изменения происходят нормально ,но
при добавление строки ее видит только моя программа.Подскажите пожалуйста в чем я ошибся.
var
 Form1: TForm1;
 DwOldFree,DwNewFree,DWOLdComm,
 DwNewComm,DwOldRese,DwNewRese:dword;
 ind:byte;
 data:pchar;
 hFile,hMapping:thandle;
  mbi : TMemoryBasicInformation;

procedure TForm1.Button3Click(Sender: TObject);
begin
data:=nil;
if opendialog1.Execute then
 begin
 hFile:=CreateFile ( Pchar (opendialog1.FileName),Generic_Read or GENERIC_WRITE,
0,nil,OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH,0 );
 hMapping := CreateFileMapping (hFile, nil, PAGE_READWRITE ,
                                 {SEC_RESERVE or SEC_COMMIT}0 ,0,nil );
 CloseHandle (Hfile);
 Data := MapViewOfFile (hMapping,FILE_MAP_ALL_ACCESS ,0,0,0);
 memo1.SetTextBuf(data);
 end;
end;

procedure TForm1.N3Click(Sender: TObject);
var
   h:thandle;
begin
if (data=nil) then
if savedialog1.Execute then
 begin
 hFile:=CreateFile ( Pchar (savedialog1.FileName),Generic_Read or GENERIC_WRITE,
 File_Share_Read,nil,OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN,0 );

 hMapping := CreateFileMapping (hFile, nil, PAGE_READWRITE ,
                                 {SEC_RESERVE or SEC_COMMIT}0 ,0,nil );
 Data := MapViewOfFile (hMapping,FILE_MAP_ALL_ACCESS ,0,0,0);
 memo1.GetTextBuf(data,memo1.GetTextLen+1) ;
 FlushViewOfFile(data,memo1.GetTextLen+1);
 data:=nil;
 end;
memo1.GetTextBuf(data,memo1.GetTextLen+1) ;
FlushViewOfFile(data,memo1.GetTextLen+1);
UnmapViewOfFile (Data);
data:=nil;
end;


← →
Мастер ©   (2004-11-18 21:44) [1]

А как второй процесс открывает проекцию?


← →
Ihor Osov'yak ©   (2004-11-18 21:55) [2]

хм.. странно, что программа вообще не вылетает.

Вот здесь - в первом memo1.GetTextBuf(data,memo1.GetTextLen+1) ; - для случая, если размер файла менше, чем размер memo1.GetTextLen+1... Причина, возможно, в том, что память под мапирование распределяется страницами..
Увеличте текст в мемо более чем на 4096 символов - думаю, вылет будет гарантировано..

А не сохраняется потому, что Вы пытаетесь оперировать с памятью за пределами мапированой области.. Кто сказал, что в этом случае система размер файла будет увеличивать? Это что-то сродни попытки залить 4 литра в трехлитровую бутыль..


← →
The Scorpion   (2004-11-18 23:26) [3]

"Кто сказал, что в этом случае система размер файла будет увеличивать?"
А можно сделать так чтобы он увеличился?


← →
Игорь Шевченко ©   (2004-11-18 23:29) [4]


>  можно сделать так чтобы он увеличился?


Нет. Под FileMapping место нужно отводить заранее.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
14-1102057966
Lancelot
2004-12-03 10:12
2005.01.02
Вопрос специалистам по Java


9-1093153629
Ле:рч
2004-08-22 09:47
2005.01.02
Пожалуйста, оцените !


14-1102929078
dr Tr0jan
2004-12-13 12:11
2005.01.02
Почему inc(StringGrid1.RowCount) не работает,


4-1100548756
влад
2004-11-15 22:59
2005.01.02
как узнать частоту и загрузку(%) процессора


4-1100697304
cautur
2004-11-17 16:15
2005.01.02
Формат даты Windows




   Наверх