Форум: "Основная";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизФАЙЛЫ HELP!! Найти похожие ветки
← →
Andron.Ru © (2005-12-20 13:22) [0]Пытаюсь запихнуть в один файл несколько разных файлов... Причем формат файлов не должен играть никакой роли!! В чем ошибка ПОМОГИТЕ.... На Сях катит, а вот на Делфе нет.. Я думаю что все дело в работе с памятью... Заранее Спсб...
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
THdr = record
offset : Cardinal;
size : Cardinal;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
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;
end.
← →
Andron.Ru © (2005-12-20 13:25) [1]Это просто для сравнения кода сей и делфей... Нужен именно такой алгоритм
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c