Главная страница
    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.45 MB
Время: 0.021 c
1-1102770894
Kolan
2004-12-11 16:14
2005.01.02
Помогитес двоичным числом разобраться


3-1102300486
Apophis
2004-12-06 05:34
2005.01.02
Определение кол-ва пользователей....


1-1103025766
Юрий К
2004-12-14 15:02
2005.01.02
работа с кодом от dcu2pas v1.3


14-1102770444
БезОбид
2004-12-11 16:07
2005.01.02
Мануал для "автошемы"


3-1101984344
ksa2002
2004-12-02 13:45
2005.01.02
IBDataset





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский