| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > FileMapping |
| Автор: NetDigger 5.11.2004, 09:35 |
| Здравствуйте, уважаемые! Вопрос в следующем: проецирую файл в память, его содержимое загоняю в Мемо (текстовый файл менее 40 кб). изменяю его в Мемо, а теперь как его вернуть взад на диск? FlushViewOfFile не работает вообще. Приведу части исходника. Как записать изменения, сделанные в Мемо обратно в текстовый файл на диске. Сделать это надо в Вин98 и в Вин2000. Кроме того, когда мэплю файл в Вин98 и вывожу его содержимое - в отображении появляется всякая хрень. В вин2000 такого нет. Заранее спасибо var Data: Pointer; HFile, HMMF: THandle; PathToFile : Pchar; Begin HFile := CreateFile ( Pchar (PathToFile),Generic_All, File_Share_Read or File_Share_Write, nil, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN,0 ); If ( HFile = 0 ) then Begin ShowMessage('Error on stage CreateFile!'); EXIT; End; HMMF := CreateFileMapping (hFile,nil,PAGE_READWRITE,0,0,'Leha' ); If HMMF = 0 then Begin ShowMessage(' Error on stage CreateFileMapping' ); exit; End; // Data := nil; Data := MapViewOfFile (HMMF, FILE_MAP_ALL_ACCESS, 0, 0, 0 ); If Data = nil then SHowMessage('ERROR!!!'); memo1.SetTextBuf(Data); End; |
| Автор: <Spawn> 5.11.2004, 12:10 |
| Видимо, что SetTextBuf фомрирует новый блок данных, являющийся копией текста, на который указывает передаваемый указатель. Так что делай так: [code=] Memo1.GetTextBuf(Data, Memo1.GetTextLen); FlushViewOfFile(Data, Memo1.GetTextLen);[/CODE] Но учти что размер спроецированного файла, если мне не изменяет память, нельзя изменить, без перепроецирования |
| Автор: p0s0l 5.11.2004, 18:52 |
| Перенесенно из раздела Delphi |