|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите с TFileStream (чтение)
Вобщем, такая проблема. В данной проге я пытаюсь сделать следующее: при нажатии на одну кнопку текст из TEdit заносится в файл. При нажатии на другую кнопку текст, наоборот, читается из файла и заносится в TEdit. И вроде работает, но при чтении в Edit записывается не тот текст, который я вводил ранее, а какие-то каракули. Кто нибудь может подсказать, как исправить? Исходники прилагаются (код см. ниже + архив см. в аттачменте).
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; tf: TFileStream; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin tf:=TFileStream.Create('1.trololo',fmCreate); tf.Free; end; procedure TForm1.Button2Click(Sender: TObject); var s: string; begin s:=Edit1.Text; tf:=TFileStream.Create('1.trololo',fmOpenWrite); tf.Write(s,SizeOf(s)); tf.Free; end; procedure TForm1.Button3Click(Sender: TObject); var s: string; begin tf:=TFileStream.Create('1.trololo',fmOpenRead); tf.Seek(0,soFromBeginning); tf.Read(s,SizeOf(s)); Edit1.Text:=s; tf.Free; end; end. ЗЫ. Возможно, надо что-то намутить с указателями, но я не знаю, что именно... |
#2
|
|||
|
|||
Код из моих проектов:
Код:
function TModelItemBase.ReadString(AStream: TStream): String; var ALen : Integer; begin ALen := ReadInt(AStream); SetLength(Result,ALen); If ALen > 0 Then AStream.Readbuffer(Result[1],ALen); end; procedure TModelItemBase.WriteString(AStream: TStream; AValue: String); var ALen : Integer; begin ALen := Length(AValue); WriteInt(AStream,ALen); If ALen > 0 Then AStream.WriteBuffer(AValue[1],ALen); end; |
#3
|
||||
|
||||
Что ты пытаешься указать?
Код:
tf.Write(s,SizeOf(s)); tf.Read(s,SizeOf(s)); |
#4
|
||||
|
||||
Так ещё можно попробовать:
Код:
//запись procedure TForm1.Button1Click(Sender: TObject); Var S: String[32]; F: TFileStream; begin S:= Edit1.Text; F:= TFileStream.Create('1.trololo', fmCreate); F.Write(s, 32); F.Free; end; //чтение procedure TForm1.Button2Click(Sender: TObject); Var S: String[32]; F: TFileStream; begin F:= TFileStream.Create('1.trololo', fmOpenRead); F.Position:= 0; F.Read(S, 32); Edit1.Text:= S; F.Free; end; If end Then begin; |
#5
|
||||
|
||||
Цитата:
|
#6
|
||||
|
||||
Можно закодировать "страшным" алгоритмом)
Код:
procedure TForm1.Button1Click(Sender: TObject); Var S: String[32]; F: TFileStream; i: Integer; begin S:= Edit1.Text; F:= TFileStream.Create('1.trololo', fmCreate); For i:= 0 To 31 Do S[i]:= Chr(Not(Ord(S[i]) Xor $4F)); F.Write(S, 32); F.Free; end; procedure TForm1.Button2Click(Sender: TObject); Var S: String[32]; F: TFileStream; i: Integer; begin F:= TFileStream.Create('1.trololo', fmOpenRead); F.Position:= 0; F.Read(S, 32); For i:= 0 To 31 Do S[i]:= Chr(Not(Ord(S[i]) Xor $4F)); Edit1.Text:= S; F.Free; end; If end Then begin; |