Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не типизированный файл запись/чтение, писать поток 
:(
    Опции темы
Rohoss
Дата 12.5.2008, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



Можно ли хранить поток в не типизированном файле? Почему такой способ не проходит?

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    btnWrite: TButton;
    btnRead: TButton;
    procedure btnReadClick(Sender: TObject);
    procedure btnWriteClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;



var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnReadClick(Sender: TObject);
var
numMemo1,numMemo2,sizeMemo1,sizeMemo2:word;
NoTypeFile:file;
ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
AssignFile(NoTypeFile,'1.dat');
Reset(NoTypeFile,1);

BlockRead(NoTypeFile,numMemo1,2);
Seek(NoTypeFile,2);
BlockRead(NoTypeFile,sizeMemo1,2);

ShowMessage(IntToStr(sizeMemo1));

Seek(NoTypeFile,numMemo1);

ms.SetSize(sizeMemo1);
ms.Position:=0;
BlockRead(NoTypeFile,ms,sizeMemo1);


ms.Position:=0;
Memo1.Lines.LoadFromStream(ms);


end;

procedure TForm1.btnWriteClick(Sender: TObject);
var
numMemo1,numMemo2,sizeMemo1,sizeMemo2:word;
NoTypeFile:file;
ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
AssignFile(NoTypeFile,'1.dat');
Rewrite(NoTypeFile,1);

numMemo1:=8;
Memo1.Lines.SaveToStream(ms);
sizeMemo1:=ms.Size;


BlockWrite(NoTypeFile,numMemo1,2);
Seek(NoTypeFile,2);
BlockWrite(NoTypeFile,sizeMemo1,2);
Seek(NoTypeFile,numMemo1);
ms.Position:=0;

BlockWrite(NoTypeFile,ms,sizeMemo1);

ms.Clear;
Memo2.Lines.SaveToStream(ms);
sizeMemo2:=ms.Size;
ms.Position:=0;

numMemo2:=numMemo1+sizeMemo1;

Seek(NoTypeFile,4);
BlockWrite(NoTypeFile,numMemo2,2);

Seek(NoTypeFile,6);
BlockWrite(NoTypeFile,numMemo2,2);

ms.Position:=0;
Seek(NoTypeFile,numMemo2);
BlockWrite(NoTypeFile,ms,sizeMemo2);
ms.Clear;

CloseFile(NoTypeFile);

end;

end.



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Snowy
Дата 13.5.2008, 16:31 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Я чего-то не понимаю...
Зачем всё это, если у TMemoryStream и у TMemo.Lines есть методы SaveToFile и LoadFromFile...
PM MAIL   Вверх
Rohoss
Дата 15.5.2008, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



Цитата(Snowy @  13.5.2008,  16:31 Найти цитируемый пост)
Я чего-то не понимаю...Зачем всё это, если у TMemoryStream и у TMemo.Lines есть методы SaveToFile и LoadFromFile...


Я хочу научиться хранить в не типизированном файле, данные разных типов и динамически – меняющейся длинны. Ну сделать что-то вроде своего типа файлов. 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Coder
Дата 15.5.2008, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 2
Всего: 11



А что после BlockWrite/Read нужно перемещать указатель - seek?  smile 

В эти функции нужно передавать буфер для чтения/записи в него из него. А TMemoryStream подхоит ли в качестве такого буфера?
PM MAIL   Вверх
SneG0K
Дата 15.5.2008, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 3
Всего: 54



Rohoss, а кто тебе мешает допустим использовать обычный текстовый файл, тока с форматом допустим *.roh?
PM WWW Skype   Вверх
Snowy
Дата 15.5.2008, 12:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Ну создай TFileStream и сохрани в него через SaveToStream.
Забудь вообще о типе file. Это прошлый век.
PM MAIL   Вверх
Rohoss
Дата 16.5.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



Цитата(SneG0K @  15.5.2008,  08:34 Найти цитируемый пост)
Rohoss, а кто тебе мешает допустим использовать обычный текстовый файл, тока с форматом допустим *.roh?

А как я тогда запишу в него музыку и/или изображение?

Цитата(Coder @  15.5.2008,  07:14 Найти цитируемый пост)
В эти функции нужно передавать буфер для чтения/записи в него из него. А TMemoryStream подхоит ли в качестве такого буфера?

Хз, вот записывает, а читать чего-то не хочет… 

Цитата(Snowy @  15.5.2008,  12:02 Найти цитируемый пост)
Забудь вообще о типе file. Это прошлый век.

Ок, буду использовать TFileStream

А вообще может, кто знает в Инете статейку о создании своего типа файла? Мне нужно хранить в файле данные разных типов и разной длинны, причём количество различных данных тоже может манятся. А потом всё это нужно корректно прочитать.  Как это сделать лучше, может уже есть готовые решения? 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Snowy
Дата 16.5.2008, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Если не хочешь изобретать велосипед, просто используй zip.
Статей нет - свой формат аналогичен своему сетевому протоколу - на всё воля разработчика.
Тут стандартов нет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.