![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите с Файлами! [D7, WinXP]
Andron.Ru © (2005-12-20 13:59:00)Пытаюсь запихнуть в один файл несколько разных файлов... Причем формат файлов не должен играть никакой роли!! В чем ошибка ПОМОГИТЕ.... На Сях катит, а вот на Делфе нет.. Я думаю что все дело в работе с памятью... Заранее Спсб...
P/S
Причем алгоритм должен быть именно такой, другие варианты мной уже рассмотренны..
.............
type
THdr = record
offset : Cardinal;
size : Cardinal;
end;
.............
procedure TForm1.Button1Click(Sender: TObject);
var
hdr : array [0..1] of THdr;
sizeread : Cardinal;
hfile1, map : HFile;
content1, content2, ptr : Pointer;
begin
hfile1 := CreateFile('c:\1.bmp', GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
hdr[0].size := GetFileSize(hfile1, nil);
GetMem(content1, hdr[0].size);
ReadFile(hfile1, content1, hdr[0].size, sizeread, nil);
CloseHandle(hfile1);
hdr[0].offset := sizeof(hdr);
hfile1 := CreateFile('c:\1.txt', GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
hdr[1].size := GetFileSize(hfile1, nil);
GetMem(content2, hdr[1].size);
ReadFile(hfile1, content2, hdr[1].size, sizeread, nil);
CloseHandle(hfile1);
hdr[1].offset := sizeof(hdr);
hfile1 := CreateFile('c:\outfile.bin', GENERIC_READ + GENERIC_WRITE, 0, nil, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
map := CreateFileMapping (hfile1, nil, PAGE_READWRITE, 0, hdr[1].offset + hdr[1].size, nil);
ptr := MapViewOfFile(map, FILE_MAP_WRITE + FILE_MAP_READ, 0, 0, 0);
CopyMemory(ptr, @hdr, sizeof(hdr));
CopyMemory(Pointer(Cardinal(ptr) + hdr[0].offset), content1, hdr[0].size);
CopyMemory(Pointer(Cardinal(ptr) + hdr[1].offset), content2, hdr[1].size);
UnmapViewOfFile(ptr);
CloseHandle(map);
CloseHandle(hfile1);
FreeMem(content1, SizeOf(content1));
FreeMem(content2, SizeOf(content2));
end;
...........
Andron.Ru (2005-12-20 14:27:00) [1]Спасибо понял..... Работает..
Тока еще одна ошибка была
Вот тут..
hdr[0].size := GetFileSize(hfile1, nil);
GetMem(content1, hdr[0].size);
ReadFile(hfile1, content1, hdr[0].size, sizeread, nil);
CloseHandle(hfile1);
hdr[0].offset := sizeof(hdr);
hfile1 := CreateFile('c:\1.txt', GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
hdr[1].size := GetFileSize(hfile1, nil);
GetMem(content2, hdr[1].size);
ReadFile(hfile1, content2, hdr[1].size, sizeread, nil);
CloseHandle(hfile1);
hdr[1].offset := sizeof(hdr);</CODE>
Не указал смещение!
MBo (2005-12-20 14:04:00) [2]ReadFile(hfile1,content1 ^