Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Внизпомогите с Файлами! Найти похожие ветки
← →
Andron.Ru © (2005-12-20 13:59) [0]Пытаюсь запихнуть в один файл несколько разных файлов... Причем формат файлов не должен играть никакой роли!! В чем ошибка ПОМОГИТЕ.... На Сях катит, а вот на Делфе нет.. Я думаю что все дело в работе с памятью... Заранее Спсб...
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;
...........
← →
MBo © (2005-12-20 14:04) [1]ReadFile(hfile1,content1^
← →
Andron.Ru © (2005-12-20 14:27) [2]Спасибо понял..... Работает..
Тока еще одна ошибка была
Вот тут..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>
Не указал смещение!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c