![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Файл больше 136 КБ
Prov © (2003-07-24 10:23:00)Здравствуйте, Мастера...
Такой вопрос-проблема:
Есть многострочный эдит, писанный на АПИ.Так я загружаю в него текст из файла:
procedure LoadFile;
var Path: AnsiString; Buffer: array[1..MAXIMUM_ALLOWED div 200] of PChar;
begin
FillChar(Buffer, SizeOf(Buffer), 0);
Path:= GetOpenFilePath;
if Length(Path)>0 then
begin
StreamLoad.Free;
StreamLoad:= TFileStream.Create(Path, fmOpenRead or fmShareExclusive);
StreamLoad.Read(Buffer, SizeOf(Buffer));
( hEdit, @Buffer)
Здравствуйте, Мастера...
Такой вопрос-проблема:
Есть многострочный эдит, писанный на АПИ.Так я загружаю в него текст из файла:
procedure LoadFile;
var Path: AnsiString; Buffer: array[1..MAXIMUM_ALLOWED div 200] of PChar;
begin
FillChar(Buffer, SizeOf(Buffer), 0);
Path:= GetOpenFilePath;
if Length(Path)>0 then
begin
StreamLoad.Free;
StreamLoad:= TFileStream.Create(Path, fmOpenRead or fmShareExclusive);
StreamLoad.Read(Buffer, SizeOf(Buffer));
SetWindowText(hEdit, @Buffer);
end;
end;
Но....
Максимум в него влазит 136 КБ и всё ! А нужно открывать файлы до 5 Мб...
Помогите, пожалуйста.
Заранее благодарен.
Prov (2003-07-28 09:25:00) [1]
Спасибо Вам большое, мастера.
Всё получилось.
Verg (2003-07-26 17:15:00) [2]
var S : string;
....
StreamLoad:= TFileStream.Create(Path, fmOpenRead or fmShareExclusive);
SetLength(S, StreamLoad.Size)
StreamLoad.Read(S[1], StreamLoad.Size);
SetWindowText(hEdit, Pchar(S));
....
Набережных С. (2003-07-24 20:43:00) [3]
MAXIMUM_ALLOWED = $02000000. Если поделить на 200, то около того и будет. Это константа из secuity, ни к каким размерам отношения не имеющая. Если, конечно, автор вопроса ее не переопределил, что вряд-ли.
Verg (2003-07-24 16:37:00) [4]
> Buffer: array[1..MAXIMUM_ALLOWED div 200] of PChar;
Это типа локальня переменная, т.е. значит в стеке. В стеке не принято размещать очень много данных, если память мне не изменяет, то на процесс по мегабайту стека отведена.
В любом случае
1. MAXIMUM_ALLOWED - величина нам неизвестная
2. Если файл размером будет больше, чем MAXIMUM_ALLOWED div 200,
в Buffer - е будет не null-terminated string и, т.о., чем
закончится SetWindowText неизвестно, может и AV
clickmaker (2003-07-24 15:50:00) [5]
Вообще-то неправильно это: городить статические буфера такого размера.
Buffer := PChar(GlobalAlloc(Size, GPTR)) - так грамотнее
Prov (2003-07-24 14:57:00) [6]
Ну может, подскажите, если не затруднит, что там заместь 200 надо поставить...
Если ставлю <200, программа просто вылетает на этом(Access Violation)
Anatoly Podgoretsky (2003-07-24 14:51:00) [7]
var
Path: AnsiString; Buffer: array[1..MAXIMUM_ALLOWED div 200] of Char;
Разобраться также с 200
Prov (2003-07-24 14:31:00) [8]
Блин !!! Ничего не понял ....
Извиняюсь, можна поподробнее..
Prov (2003-07-24 14:22:00) [9]
Может быть..... Спасибо большое, буду щас пробовать.
clickmaker (2003-07-24 10:36:00) [10]
А что это за загадочное выражение: MAXIMUM_ALLOWED div 200 ?
Может нужно EM_LIMITTEXT послать ?