|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Запись n-мерного массива на диск, как куска памяти
Здравствуйте!
Интересует такой вопрос: Есть ли возможность записывать массив (любой размерности без перебора!!) в файл, как проекции памяти. Т.е. в том виде, как он хранится памяти, так его и писать побайтово (да, от перебора не отказаться совсем конечно)... Как это осуществить и что читать? Пытался осилить мелкософтовский мануал по WinAPI, только опух от этого, не хватает практических примеров. Спасибо. |
#2
|
||||
|
||||
Nihil novi sub Luna.
См. CreateFileMapping, на сайте "Королевство Дельфи" есть хорошие примеры. Писать в такой файл можно простым CopyMemory (как её использовать - см. F1). Ах да, еще есть TFileStream, сводящий работу с файлом к функциям Read и Write. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 23.04.2013 в 09:16. |
#3
|
|||
|
|||
Цитата:
Ой, забыл совсем добавить, что хорошо бы силами паскаля это делать, полскольку, мне хотелось бы кросс-платформенности. Под линупсом че вызывать фиг знает. Но за винапи функцию очень спасибо, поизучаю Последний раз редактировалось damekkoneko, 23.04.2013 в 09:22. |
#4
|
||||
|
||||
Я дописал сообщение, посмотри.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var arr: array [0..1, 0..3] of Word; x, y: Byte; hFile: THandle; Dummy: DWORD; begin Memo1.Clear; for x:=0 to 1 do for y:=0 to 3 do begin arr[x, y]:=x shl 8 or y; Memo1.Lines.Add(Format('%.4x', [arr[x, y]])); end; hFile:=CreateFile('Project1.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0); WriteFile(hFile, PByte(@arr[0, 0])^, SizeOf(arr), Dummy, nil); CloseHandle(hFile); end; end. Пишу программы за еду. __________________ |
#6
|
|||
|
|||
Цитата:
Вот, вот этого мне и не хватало: Код:
PByte(@arr[0, 0])^ Осталось разобраться, как преобразовать строковой массив. Спасибо) Последний раз редактировалось damekkoneko, 23.04.2013 в 15:37. |
#7
|
||||
|
||||
смотря какие строки: short или long. с первыми проблем нет:
Код:
var arr: array [0..1, 0..3] of String[7]; x, y: Byte; hFile: THandle; Dummy: DWORD; begin Memo1.Clear; for x:=0 to 1 do for y:=0 to 3 do arr[x, y]:=IntToHex(x shl 8 or y, 7); hFile:=CreateFile('Project1.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0); WriteFile(hFile, PByte(@arr[0, 0])^, SizeOf(arr), Dummy, nil); CloseHandle(hFile); end; Пишу программы за еду. __________________ |