![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TFileStream [D7, WinXP]
Firefly © (2006-05-09 22:10:00)Здравствуйте. С праздником всех!
У меня такой вопрос. Почему данный код не работает - вылетает с ошибкой
Invalid property value при попытке открыть файл? Если же использую ReadStr, то файл открывается, но функция возвращает лишь маленький кусок строки.
procedure TFMain.bbOpenProfileClick(Sender: TObject);
var
Profile:string;
ProfileStream:TFileStream;
R:TReader;
begin
if OpDlgProfileEdit.Execute then
Profile:=OpDlgProfileEdit.FileName;
ProfileStream:=TFileStream.Create(Profile,fmOpenReadWrite);
ProfileStream.Position:=0;
R:=TReader.Create(ProfileStream,10000000);
mmProfileEdit.Lines[0]:=R. ReadString;end;
Anatoly Podgoretsky (2006-05-10 11:57:00) [1]Методов нет, только процедуры, основные ReadLn и WriteLn
Firefly (2006-05-10 10:10:00) [2]
> И вообще какой блокнот, TReader вообще то с бинарным файлом
> работает.
Только сейчас дошло:-)))
А какие методы есть для работы с текстовыми файлами?
Firefly (2006-05-10 07:06:00) [3]
> [10] jack128 ©
Копирую в виндовый блокнот из лог-файлов JBoss.
Но раз ты так упорен насчет битого файла, я поэкспериментирую с файлами(и кодировками), мож чего получится.
jack128 (2006-05-10 04:17:00) [4]Firefly © (10.05.06 1:23) [9]
Файл я пишу просто - открываю блокнот и Ctrl-C Ctrl-V.
откуда Ctrl+C ?? И вообще какой блокнот, TReader вообще то с бинарным файлом работает.
Firefly (2006-05-10 01:23:00) [5]
> [8] jack128 ©
Файл я пишу просто - открываю блокнот и Ctrl-C Ctrl-V.
Да и пробовал на разных файлах - везде та же ерунда
jack128 (2006-05-10 00:34:00) [6]Пусик © (09.05.06 23:24) [7]
Т.е. даже если не существует ни одной строки, вполне можно прочитать нулевую строку.
вообще то - это проблемы реализации виндового класса EDIT, а никак не дельфи.
Firefly © (09.05.06 22:10)
потому что у тебя файл битый. Покажи как пишешь файл..
Пусик (2006-05-09 23:24:00) [7]
> KilkennyCat © (09.05.06 22:33) [5]
>
>
> > А у тебя строка с индексом [0] уже существует в этот момент?
>
>
>
> а разве нулевая может не существовать?
Да. Может.
Но вот реализация таких наследников от TStrings, как TMemo и TListBox, как мне кажется, неправильно сделана.
property Strings[Index: Integer]: string read Get write Put; default;
procedure TStrings.Put(Index: Integer; const S: string);
var
TempObject: TObject;
begin
TempObject := GetObject(Index);
Delete(Index);
InsertObject(Index, S, TempObject);
end;
Т.е. даже если не существует ни одной строки, вполне можно прочитать нулевую строку. Более того, будет работать и такой код:
Memo1.Lines.Clear;
Memo1.Lines[0] := '0';
Memo1.Lines[1] := '1';
Memo1.Lines[2] := '2';
и т.д.
А также можно прочитать без ущерба для себя из несуществующей строки:
Memo1.Lines.Clear;
s := Memo1.Lines[0];
А вот с TStringList этот фокус не пройдет. В этом классе миетоды доступа к строкам реализованы правильно.
Firefly (2006-05-09 22:46:00) [8]Наверное, имелось ввиду что [0] не заполнена.
Хотя, даже если и заполнена, я ж ей значение присваиваю, должно быть по барабану.
KilkennyCat (2006-05-09 22:33:00) [9]
> А у тебя строка с индексом [0] уже существует в этот момент?
а разве нулевая может не существовать?
Firefly (2006-05-09 22:30:00) [10]
> 3] TUser ©
Та же ерунда
TUser (2006-05-09 22:22:00) [11]ТОгда mmProfileEdit.Lines.Add();
Firefly (2006-05-09 22:13:00) [12]Нет, не существует.
Да и не в этом дело - ReadStr работает же(хоть и коряво).
Пусик (2006-05-09 22:12:00) [13]mmProfileEdit.Lines[0]:=R.ReadString;
А у тебя строка с индексом [0] уже существует в этот момент?