Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/48: Рейтинг темы: голосов - 48, средняя оценка - 4.77
Allrond
2 / 2 / 2
Регистрация: 26.10.2012
Сообщений: 85
1

Ошибка Out of memory

07.11.2012, 00:04. Просмотров 8850. Ответов 16
Метки нет (Все метки)

При шифровании файла размером более 100мб вылетает ошибка "Out of memory'' - почитал и понял что это из-за недостатка выделенной памяти на массив/строку. Подскажите пожалуйста как решить эту проблему?
p.s. Работаю со строками ansistring
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 00:04
Ответы с готовыми решениями:

Ошибка out of memory
Всем привет! При загрузке файла выше 200-300 мб вылазит ошибка out of memory...

Ошибка: Out of Memory
XE-5 AllocMemSize: Integer deprecated; {Unsupported} AllocMemCount: Integer...

Ошибка out of memory
Пишу программу. Программа работает с текстовыми файлами. Краткий алгоритм....

Ошибка: Out of memory на Delphi XE3
Добрый день, при разработке программ время от времени появляется ошибка Out of...

Ошибка 'Out of memory'. График двух функций
Быдло кодер то есть я, написал кривой код в следствии чего, компилятор выдаёт...

16
angstrom
2470 / 1846 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
07.11.2012, 00:09 2
Посмотри CreateFileMapping.
0
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
07.11.2012, 00:10 3
Вариантов всего три:
1. Исправить ошибки, связанные с неконтролирумым расходом ресурсов памяти приложения.
2. Оптимизировать свой алгоритм с целью минимизации расхода ресурсов памяти приложения.
3. Отказаться от этого алгоритма в пользу другого, менее ресурсоемкого.
0
Allrond
2 / 2 / 2
Регистрация: 26.10.2012
Сообщений: 85
07.11.2012, 00:16  [ТС] 4
Цитата Сообщение от mss Посмотреть сообщение
Вариантов всего три:
1. Исправить ошибки, связанные с неконтролирумым расходом ресурсов памяти приложения.
2. Оптимизировать свой алгоритм с целью минимизации расхода ресурсов памяти приложения.
3. Отказаться от этого алгоритма в пользу другого, менее ресурсоемкого.
А можно-ли как-нибудь увеличить эти ресурсы?
0
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
07.11.2012, 00:20 5
Цитата Сообщение от Allrond Посмотреть сообщение
А можно-ли как-нибудь увеличить эти ресурсы?
Да даже если можно было бы - где гарантия что завтра ты не попытаешься обработать файл гораздо большего размера ?
И опять столкнешься с той же проблемой - ресурсы пямяти ведь не резиновые и имеют так или иначе предел ..
Начинать нужно с п.1
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
07.11.2012, 00:23 6
Allrond, файл не весь загружай, а по частям. Можно выделить буфер размером, например, в 1 Мегабайт. Загрузил в буфер часть, зашифровал её, сохранил в другой файл. Потом - следующую часть. И т. д. Помнишь, в другой теме мы код загрузки из файла обсуждали. И вот там, как раз, я упоминал, как грузить и обрабатывать по частям. - Код внизу сообщения.
1
Allrond
2 / 2 / 2
Регистрация: 26.10.2012
Сообщений: 85
07.11.2012, 00:27  [ТС] 7
Цитата Сообщение от mss Посмотреть сообщение
Да даже если можно было бы - где гарантия что завтра ты не попытаешься обработать файл гораздо большего размера ?
И опять столкнешься с той же проблемой - ресурсы пямяти ведь не резиновые и имеют так или иначе предел ..
Начинать нужно с п.1
По пункту 1 - у меня больше всего памяти занимают 2 строки - хранящие код (одна обращается к другой, которые нельзя удалять.
Есть ли процедура - освобождающая память?

Добавлено через 1 минуту
Цитата Сообщение от Mawrat Посмотреть сообщение
Allrond, файл не весь загружай, а по частям. Можно выделить буфер размером, например, в 1 Мегабайт. Загрузил в буфер часть, зашифровал её, сохранил в другой файл. Потом - следующую часть. И т. д. Помнишь, в другой теме мы код загрузки из файла обсуждали. И вот там, как раз, я упоминал, как грузить и обрабатывать по частям. - Код внизу сообщения.
Самое смешное - файл должен быть один - это требования к работе.
Если BlockWrite реально организовать по частям в 1 файл - опиши пожалуйста поподробней.
0
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
07.11.2012, 00:29 8
Цитата Сообщение от Allrond Посмотреть сообщение
у меня больше всего памяти занимают 2 строки - хранящие код (одна обращается к другой, которые нельзя удалять
"Больше всего" мне ни о чем не говорит.

Цитата Сообщение от Allrond Посмотреть сообщение
Есть ли процедура - освобождающая память?
Прежде чем рассуждать на эту тему ты должен убедиться что в твоем коде нет утечек памяти
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
07.11.2012, 00:31 9
Цитата Сообщение от Allrond Посмотреть сообщение
Самое смешное - файл должен быть один - это требования к работе.
А что за шифрование? Если зашифрованная часть имеет такой же размер, что и исходная, то можно также действовать - грузить части, шифровать их и записывать в исходный файл (перезаписывая прежнее содержимое).
2
Allrond
2 / 2 / 2
Регистрация: 26.10.2012
Сообщений: 85
07.11.2012, 08:31  [ТС] 10
Цитата Сообщение от Mawrat Посмотреть сообщение
А что за шифрование? Если зашифрованная часть имеет такой же размер, что и исходная, то можно также действовать - грузить части, шифровать их и записывать в исходный файл (перезаписывая прежнее содержимое).
Delphi
1
    BlockRead(F, Buff[1], BuffSize, Cnt);
Cnt - что это?
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
07.11.2012, 08:57 11
Cnt - это количество реально прочитанных блоков из файла F. В данном случае файл открыт так:
Delphi
1
2
  //Открываем файл в режиме с минимальным блоком чтения/записи в 1 байт.
  Reset(F, 1);
Т. е., 1 блок = 1 байт.
Cnt может быть меньше, чем BuffSize. Например, предположим, BuffSize = 1000000, а от текущей позиции до конца файла расположено 1000 байт (блоков). Поэтому при очередном вызове BlockRead() будет прочитано только 1000 байт. Вот это число 1000, как раз и будет записано в переменную Cnt.
0
Allrond
2 / 2 / 2
Регистрация: 26.10.2012
Сообщений: 85
07.11.2012, 18:40  [ТС] 12
Цитата Сообщение от Mawrat Посмотреть сообщение
Cnt - это количество реально прочитанных блоков из файла F. В данном случае файл открыт так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Const
BuffSize=115343359  ; //Размер буфера в байтах.
var
F:file;
Strinput:array of byte;
Buff1,Buff2,HexInput : AnsiString;
i,j, Cnt,H,Len : Integer;
FileName,Stmp: String;
Dialog: TOpenDialog;
begin
Buff1:='';
Buff2:='';
....
Delphi
1
2
  //Открываем файл в режиме с минимальным блоком чтения/записи в 1 байт.
  Reset(F, 1);
Т. е., 1 блок = 1 байт.
Cnt может быть меньше, чем BuffSize. Например, предположим, BuffSize = 1000000, а от текущей позиции до конца файла расположено 1000 байт (блоков). Поэтому при очередном вызове BlockRead() будет прочитано только 1000 байт. Вот это число 1000, как раз и будет записано в переменную Cnt.
А Cnt нужно задавать перед обработкой и в конце обработки куска файла инкриминировать?

Добавлено через 9 минут
Правильно -ли я сделал:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
AssignFile(F, Dialog.FileName);
  //Открываем файл в режиме с минимальным блоком чтения/записи в 1 байт.
  Reset(F, 1);
  //Устанавливаем размер ANSI строки согласно размеру буфера.
  SetLength(Strinput, BuffSize);
  //Выполняем перебор содержимого файла через буфер Buff.
  while not Eof(F) do begin
    //Читаем очередную часть.
    BlockRead(F, Strinput[0], BuffSize, Cnt);
    Len := Size * 3 + (Size div 16);
    if Size mod 16 > 0 then Dec(Len);
    SetLength(HexInput, Len);
    H := High(StrInput);
    j := 1;
    for i := 0 to H do begin
    STmp := IntToHex(StrInput[i], 2);
    HexInput[j] := STmp[1];
    HexInput[j + 1] := STmp[2];
    Inc(j, 2);
    if i = H then Continue;
    if i mod 16 = 15 then begin
    HexInput[j] := #13;  // probel
    HexInput[j + 1] := #10; //konec stroki
    Inc(j, 2);
    end else begin
    HexInput[j] := #9;    //Tab
    Inc(j);
    end;
    end;
    Buff1:=Viz_Crypt(HexInput,Edit1.text);//Шифруем по частям
    Buff2:=Buff2+GetByteStr(Buff1);//Собираем
    end;
 BlockWrite(F,Buff2,Length(Buff2));
 CloseFile(F);
end;
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
07.11.2012, 18:46 13
Нет - Cnt нужно только читать. Его значение задаёт сама процедура BlockRead().

Добавлено через 5 минут
Цитата Сообщение от Allrond Посмотреть сообщение
Правильно -ли я сделал
HexInput здесь не понадобится. Нужно только грузить в буфер, потом шифровать его и записывать на прежнее место в файле.
Там ещё перед записью зашифрованного блока надо будет файловый указатель перемещать назад.
Я попозже напишу, как это делается.
1
Allrond
2 / 2 / 2
Регистрация: 26.10.2012
Сообщений: 85
07.11.2012, 18:54  [ТС] 14
Все-равно ошибка (Out of memory)
Посмотрите, пожалуйста в моем предыдущем коде - где утечка/переполнение памяти, не могу понять.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
procedure TForm9.Button1Click(Sender: TObject);
var
RusA: set of Char;
Finput,Hinput,Tinput : File;
Dialog : TOpenDialog;
StrInput: array of Byte;
Stmp,key: string;
i,j,H,len,size,sizeedit: integer;
Buff,shifr,Shifr2 : AnsiString;
ok :boolean;
begin
RusA:=['A','B','C','D','E','F','0','1','2','3','4','5','6','7','9'];
key:=edit1.text;
sizeedit:=Length(edit1.text);
for I := 1 to Sizeedit do begin
if (key[i] in RusA) then ok:=true
else ok:=false;
end;
if (ok=true) then begin
//Ищем файл
Progressbar1.Position:=0;
ShowMessage('Откройте нужный файл!');
Dialog := OpenDialog1;
if Dialog.InitialDir = '' then Dialog.InitialDir := ExtractFilePath( Application.ExeName );
if not Dialog.Execute then Exit;
if not FileExists(Dialog.FileName) then begin
MessageBox(0,'Файл не найден.','Файл не найден',MB_OK + MB_ICONWARNING + MB_APPLMODAL);
Exit;
end;
//Присваиваем файлу имя
AssignFile(Finput, Dialog.FileName);
Progressbar1.Position:=20;
Reset(Finput, 1);
Size:= FileSize(Finput);
If size<134217728 then begin  /////////(это на время пока не исправлю ошибку с размерами)
SetLength(StrInput, Size);//Задаем размер массива с размером файла
BlockRead(Finput, StrInput[0], Size);//Считываем файл в строку байтов
CloseFile(Finput);
//Представляем строку байтов в виде HEX кода
Len := Size * 3 + (Size div 16);
Progressbar1.Position:=50;
if Size mod 16 > 0 then Dec(Len);
SetLength(HexInput, Len);
H := High(StrInput);
j := 1;
for i := 0 to H do begin
STmp := IntToHex(StrInput[i], 2);
HexInput[j] := STmp[1];
HexInput[j + 1] := STmp[2];
Inc(j, 2);
if i = H then Continue;
if i mod 16 = 15 then begin
HexInput[j] := #13;  // probel
HexInput[j + 1] := #10; //konec stroki
Inc(j, 2);
end else begin
HexInput[j] := #9;    //Tab
Inc(j);
end;
end;
Progressbar1.Position:=70;
if checkbox1.Checked=true then Memo1.Text := HexInput; //чистый HEX
Progressbar1.Position:=90;
Shifr:=Viz_crypt(HexInput,Edit1.text);
if checkbox1.Checked=true then Memo2.Text:=shifr;      //кодированный HEX
Shifr2:=getbytestr(shifr);
AssignFile(hinput, Dialog.FileName+'.cry');
Rewrite(hinput, 1);
BlockWrite(hinput, Shifr2[1], Length(Shifr2));//Считываем файл в строку символов
Closefile(hinput);
end else begin
showmessage('Пожалуйста, выберите файл меньшего размера!');/////////(это на время пока не исправлю ошибку с размерами)
Progressbar1.Position:=0;
exit;
end;
end else showmessage('Пожалуйста, введите ключ содержащий только:A,B,C,D,E,F,0,1,2,3,4,5,6,7,9');
Progressbar1.Position:=100;
ShowMessage('Готово!');
end;
Шифрование:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function TForm9.Viz_Crypt(s, key: ansistring): ansistring;
const
D = [#9, #10, #13, #32]; //Разделители в HEX'e
SizeA = 16; //Размер алфавита
Alphabet = 'ABCDEF0123456789';
var i, P, t,size :integer;
begin
Size:=length(s);
SetLength(result,size);
result:=s;
t:=0;
for i:=1 to size do
begin
if s[i] in D then begin
Continue;
Continue;
end;
inc(t);
if t>length(key) then t:=1;
P:=pos(s[i],Alphabet)+pos(key[t],Alphabet);
if P>SizeA then P:=P-SizeA;
Result[i]:=Alphabet[P];
end;
end;
Добавлено через 1 минуту
Цитата Сообщение от Mawrat Посмотреть сообщение
Нет - Cnt нужно только читать. Его значение задаёт сама процедура BlockRead().

Добавлено через 5 минут

HexInput здесь не понадобится. Нужно только грузить в буфер, потом шифровать его и записывать на прежнее место в файле.
Там ещё перед записью зашифрованного блока надо будет файловый указатель перемещать назад.
Я попозже напишу, как это делается.
Посмотрите лучше этот код, если не очень трудно.
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
08.11.2012, 09:12 15
Allrond, с помощью метода Viz_Crypt() надо шифровать содержимое файла, а не тот текст, который подготовлен для Мемо. С Мемо вообще сейчас надо "завязать". Нужно сделать программу, которая шифрует содержимое файла и записывает зашифрованные данные опять в этот же файл. Если надо посмотреть содержимое файла - это можно через FAR сделать, например. Там в виде шестнадцатиричных кодов можно показать. В общем, просмотр - это уже другая задача. Которую отдельно надо решать.
В общем, я позже напишу, как будет выглядеть часть, связанная с чтением, шифровкой и записью.

Добавлено через 14 часов 2 минуты
Код, необходимый для работы с файлом и для выполнения шифрования.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//Процедура шифрования.
//aStr - шифруемая строка.
//aLen - количество символов, которое надо зашифровать.
//aKey - ключ.
//aInd - текущая позиция в ключе.
procedure Viz_Crypt(var aStr : AnsiString; const aLen : Integer;
  const aKey : AnsiString; var aInd : Integer);
const
  SizeA = 16; //Размер алфавита
  Alphabet = 'ABCDEF0123456789';
var
  i, P, LenKey : Integer;
begin
  LenKey := Length(aKey);
  for i := 1 to aLen do begin
    Inc(aInd);
    if aInd > LenKey then aInd := 1;
    P := Pos(aStr[i], Alphabet) + Pos(aKey[aInd], Alphabet);
    if P > SizeA then P := P - SizeA;
    aStr[i] := Alphabet[P];
  end;
end;
 
//Шифрование файла с ключом aKey.
procedure EncodeFile(const aFileName : String; const aKey : AnsiString);
const
  //Размер файлового буфера.
  BuffSize = 1000000;
var
  F : File;
  Buff : AnsiString;
  Ind, Cnt, P : Integer;
begin
  AssignFile(F, aFileName);
  //Открываем файл в режиме чтение/запись с минимальным блоком доступа в 1 байт.
  Reset(F, 1);
  //Текущая позиция в ключе.
  Ind := 0;
  while not Eof(F) do begin
    //Запоминаем текущую позицию файлового указателя.
    P := FilePos(F);
    //Читаем очередной блок в буфер.
    BlockRead(F, Buff[1], BuffSize, Cnt);
    //Шифруем значимую часть буфера.
    Viz_Crypt(Buff, Cnt, aKey, Ind);
    //Перемещаем файловый указатель к прежней позиции.
    Seek(F, P);
    //Записываем зашифрованный блок на место незашифрованного.
    BlockWrite(F, Buff[1], Cnt);
  end;
  CloseFile(F);
end;
 
//Выбор файла и его шифрование.
procedure TForm1.Button1Click(Sender: TObject);
var
  Key : AnsiString;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then Od.InitialDir := ExtractFilePath( Application.ExeName );
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageBox(0, 'Файл с заданным именем не найден. Действие отменено.',
      'Файл не найден', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
    Exit;
  end;
 
  Key := Edit1.Text;
  //Шифрование файла с ключом Key.
  EncodeFile(Od.FileName, Key);
end;
1
Allrond
2 / 2 / 2
Регистрация: 26.10.2012
Сообщений: 85
08.11.2012, 20:53  [ТС] 16
Цитата Сообщение от Mawrat Посмотреть сообщение
Allrond, с помощью метода Viz_Crypt() надо шифровать содержимое файла, а не тот текст, который подготовлен для Мемо. С Мемо вообще сейчас надо "завязать". Нужно сделать программу, которая шифрует содержимое файла и записывает зашифрованные данные опять в этот же файл. Если надо посмотреть содержимое файла - это можно через FAR сделать, например. Там в виде шестнадцатиричных кодов можно показать. В общем, просмотр - это уже другая задача. Которую отдельно надо решать.
В общем, я позже напишу, как будет выглядеть часть, связанная с чтением, шифровкой и записью.

Добавлено через 14 часов 2 минуты
Код, необходимый для работы с файлом и для выполнения шифрования.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
//Процедура шифрования.
//aStr - шифруемая строка.
//aLen - количество символов, которое надо зашифровать.
//aKey - ключ.
//aInd - текущая позиция в ключе.
procedure Viz_Crypt(var aStr : AnsiString; const aLen : Integer;
  const aKey : AnsiString; var aInd : Integer);
const
  SizeA = 16; //Размер алфавита
  Alphabet = 'ABCDEF0123456789';
var
  i, P, LenKey : Integer;
begin
  LenKey := Length(aKey);
  for i := 1 to aLen do begin
    Inc(aInd);
    if aInd > LenKey then aInd := 1;
    P := Pos(aStr[i], Alphabet) + Pos(aKey[aInd], Alphabet);
    if P > SizeA then P := P - SizeA;
    aStr[i] := Alphabet[P];
  end;
end;
 
//Шифрование файла с ключом aKey.
procedure EncodeFile(const aFileName : String; const aKey : AnsiString);
const
  //Размер файлового буфера.
  BuffSize = 1000000;
var
  F : File;
  Buff : AnsiString;
  Ind, Cnt, P : Integer;
begin
  AssignFile(F, aFileName);
  //Открываем файл в режиме чтение/запись с минимальным блоком доступа в 1 байт.
  Reset(F, 1);
  //Текущая позиция в ключе.
  Ind := 0;
  while not Eof(F) do begin
    //Запоминаем текущую позицию файлового указателя.
    P := FilePos(F);
    //Читаем очередной блок в буфер.
    BlockRead(F, Buff[1], BuffSize, Cnt);
    //Шифруем значимую часть буфера.
    Viz_Crypt(Buff, Cnt, aKey, Ind);
    //Перемещаем файловый указатель к прежней позиции.
    Seek(F, P);
    //Записываем зашифрованный блок на место незашифрованного.
    BlockWrite(F, Buff[1], Cnt);
  end;
  CloseFile(F);
end;
 
//Выбор файла и его шифрование.
procedure TForm1.Button1Click(Sender: TObject);
var
  Key : AnsiString;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then Od.InitialDir := ExtractFilePath( Application.ExeName );
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageBox(0, 'Файл с заданным именем не найден. Действие отменено.',
      'Файл не найден', MB_OK + MB_ICONWARNING + MB_APPLMODAL);
    Exit;
  end;
 
  Key := Edit1.Text;
  //Шифрование файла с ключом Key.
  EncodeFile(Od.FileName, Key);
end;
I/O error 998 выдает

Добавлено через 48 минут
Помогло добавление Setlength(Buff,BuffSize); после P := FilePos(F); , не знаю правда - правильно это, или -нет
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
08.11.2012, 22:13 17
Цитата Сообщение от Allrond Посмотреть сообщение
Помогло добавление Setlength(Buff,BuffSize); после P := FilePos(F); , не знаю правда - правильно это, или -нет
Да, верно - SetLength(Buff,BuffSize) надо добавить. Молодец. Только вызов SetLength() надо сделать до цикла. Т. е., полностью будет так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//Шифрование файла с ключом aKey.
procedure EncodeFile(const aFileName : String; const aKey : AnsiString);
const
  //Размер файлового буфера.
  BuffSize = 1000000;
var
  F : File;
  Buff : AnsiString;
  Ind, Cnt, P : Integer;
begin
  //Размещаем буфер в памяти.
  SetLength(Buff, BuffSize);
  //Текущая позиция в ключе.
  Ind := 0;
  AssignFile(F, aFileName);
  //Открываем файл в режиме чтение/запись с минимальным блоком доступа в 1 байт.
  Reset(F, 1);
  while not Eof(F) do begin
    //Запоминаем текущую позицию файлового указателя.
    P := FilePos(F);
    //Читаем очередной блок в буфер.
    BlockRead(F, Buff[1], BuffSize, Cnt);
    //Шифруем значимую часть буфера.
    Viz_Crypt(Buff, Cnt, aKey, Ind);
    //Перемещаем файловый указатель к прежней позиции.
    Seek(F, P);
    //Записываем зашифрованный блок на место незашифрованного.
    BlockWrite(F, Buff[1], Cnt);
  end;
  CloseFile(F);
end;
0
08.11.2012, 22:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2012, 22:13

Ошибка Out of memory при загрузке файла в TStringList
Добрый день. Есть следующая ситуация РС(i7 8Gb Win7 x64 + RAD XE3), приложения...

Ошибка Out of memory при проверке наличия строки S в тексте TStringList
Программа проверяет наличие строки S в тексте TStringList, происходит это около...

Ошибка [dcc32 Fatal Error] Unit10.pas(7): F2046 Out of memory
Возникла такая ошибка первый раз. Я написал программный код, начинаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru