Главная страница
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
14-1102909771
Думкин
2004-12-13 06:49
2005.01.02
С днем рождения! 13 декабря


1-1103187857
Yurij-7
2004-12-16 12:04
2005.01.02
Гарячая клавиша


1-1103132948
JIurafsfd
2004-12-15 20:49
2005.01.02
Как добавить серию в Tchart?


3-1101988326
Blondin
2004-12-02 14:52
2005.01.02
TinyDB 2.0


14-1102684509
Чеширский_Кот
2004-12-10 16:15
2005.01.02
Чему доверять?