Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: 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 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.045 c
4-1100616997
ks
2004-11-16 17:56
2005.01.02
wm_PAINT


14-1102509436
Alexander Panov
2004-12-08 15:37
2005.01.02
Победа Януковича. Противостояние. (продолжение. Часть 3)


1-1103538582
[shade]
2004-12-20 13:29
2005.01.02
Формы


14-1102886138
i-s-v
2004-12-13 00:15
2005.01.02
КЛИЧКО - ЧЕМПИОН!!!


3-1102323542
korvin
2004-12-06 11:59
2005.01.02
Параметр в хранимую процедуру