Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.06.2011, 19:52
Аватар для Chuwis720
Chuwis720 Chuwis720 вне форума
Прохожий
 
Регистрация: 22.09.2009
Сообщения: 28
Репутация: 10
По умолчанию Помогите с 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.

ЗЫ. Возможно, надо что-то намутить с указателями, но я не знаю, что именно...
Вложения
Тип файла: rar TFileStream.rar (151.8 Кбайт, 4 просмотров)
Ответить с цитированием
  #2  
Старый 04.06.2011, 20:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код из моих проектов:

Код:
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  
Старый 04.06.2011, 21:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Что ты пытаешься указать?
Код:
tf.Write(s,SizeOf(s));
tf.Read(s,SizeOf(s));
Ответить с цитированием
  #4  
Старый 05.06.2011, 11:11
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Так ещё можно попробовать:
Код:
//запись
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  
Старый 05.06.2011, 18:21
Аватар для Chuwis720
Chuwis720 Chuwis720 вне форума
Прохожий
 
Регистрация: 22.09.2009
Сообщения: 28
Репутация: 10
По умолчанию

Цитата:
Сообщение от AND_REY
Так ещё можно попробовать:
Код:
//запись
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;
Вот это, кажется, помогает... Только смущает то, что 1.trololo довольно легко открывается и просматривается блокнотом... С этим ничего нельзя сделать?
Ответить с цитированием
  #6  
Старый 05.06.2011, 20:00
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Можно закодировать "страшным" алгоритмом)
Код:
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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter