Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TStream


Страницы:   1 2 3 4

pathfinder ©   (2007-10-18 20:34:00) 

Добрый вечер.
Подскажите пожалуйста, каким образом лучше сохранить данные из TMemoryStream в файл? Но не все содержимое, а только конец определенного размера.
У меня получилось что-то такое:

 FData: TMemoryStream;
 FLimit: Integer;
 Stream: TFileStream;
 StartPos: PByte;

 StartPos := FData.Memory;
 Inc(StartPos, FData.Size - FLimit);
 Stream := TFileStream.Create(FileName, fmCreate);
 Stream.WriteBuffer(StartPos^, FLimit);
 Stream.Free;


pathfinder   (2007-10-19 22:46:00) [1]


> Jump   (19.10.07 22:25) [64]


Намек понял:) Спасибо за разъяснения.


Jump   (2007-10-19 22:25:00) [2]

А можно с помощью методов TFileStream обрезать файл без его загрузки и сохранения?

Представь себе веревку длиной 2 метра, привязанную к потолку, а с другого конца - привязана гиря. Высота потолка - 3 метра. Задание: обрезать веревку до длины в 1 метр таким образом, чтобы гиря продолжала висеть на высоте 1 метра от пола.

Вот это где-то приблизительно то, что ты хочешь сделать с файлом - обрезать его начало, но так, чтобы конец файла не переместился.

Удачи...


pathfinder   (2007-10-19 21:55:00) [3]


> Ну так назови файл - "Не открывать, убьет"


Это мысль:)


> А кто просил совсем простой, не ты ли?


Нет, не я.. Я просил не очень сложный:)


> А эти чем плохи?


Невозможностью реализации.


> Обычно так не делают.


А как делают?


Anatoly Podgoretsky   (2007-10-19 19:39:00) [4]

> pathfinder  (19.10.2007 16:11:53)  [53]

Обычно так не делают.


Anatoly Podgoretsky   (2007-10-19 19:38:00) [5]

> pathfinder  (19.10.2007 12:48:39)  [39]

А кто просил совсем простой, не ты ли?


Anatoly Podgoretsky   (2007-10-19 19:38:00) [6]

> pathfinder  (19.10.2007 14:18:42)  [42]

А эти чем плохи?


Anatoly Podgoretsky   (2007-10-19 19:37:00) [7]

> pathfinder  (19.10.2007 12:02:35)  [35]

Ну так назови файл - "Не открывать, убьет"


pathfinder   (2007-10-19 17:05:00) [8]


>
> А если эти 75% придутся не на целое число протокольных записей
> ?
>
> И в этом случае покоцаные данные в протоколе окажутся)


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


Leonid Troyanovsky   (2007-10-19 17:00:00) [9]


> pathfinder   (19.10.07 16:46) [55]

>  Но такой вариант мне не очень нравится..

Есть такой IStorage {StgCreateDocFile}, в коем можно
хранить данные как IStream, например, за один день (час).
А если оные устарели, то их можно и удалить.

Но, как оно коррелирует с размером файла -
я никогда не интересовался.

--
Regards, LVT.


Сергей М.   (2007-10-19 16:57:00) [10]


> сохранить заново в файл только например 75 процентов от
> этих данных


А если эти 75% придутся не на целое число протокольных записей ?

И в этом случае покоцаные данные в протоколе окажутся)

Думай ..


pathfinder   (2007-10-19 16:46:00) [11]

У меня была мысль, если например размер превышает предел, то загрузить содержимое файла и сохранить заново в файл только например 75 процентов от этих данных начиная с конца. Но такой вариант мне не очень нравится..


Сергей М.   (2007-10-19 16:35:00) [12]


> Я понимаю еще 10 мб


А по барабану какой размер)

Ты обозначил некий предельный размер, а что делать, если очередная протокольная запись влазит в файл лишь частично ?

Подумай ..


pathfinder   (2007-10-19 16:11:00) [13]


> Скажем, размер файла 10 байт, ты хочешь записать в него
> протокольную запись размером 11 байт.


Ну это слишком утрированный пример. Зачем же ограничивать размер лога десятью байтами? Я понимаю еще 10 мб.
Разве обычно не так делают?


Сергей М.   (2007-10-19 16:01:00) [14]


> Текущий размер файла - максимально допустимый размер


Скажем, размер файла 10 байт, ты хочешь записать в него протокольную запись размером 11 байт.

Куда девать 1 байт ? Оттяпать его от записи, чтобы запись влезла в файл ? Ну и нафих, спрашивается, нужет такой покоцаный протокол ? Что в нем можно прочитать после таких вот "оттяпываний" ради следования требованиям непревышения предельного размера ?


pathfinder   (2007-10-19 15:41:00) [15]

Подскажите пожалуйста, какие есть проверенные(шаблонные) методы для работы с лог файлами? Как обычно делают в нормальных программах?


pathfinder   (2007-10-19 15:34:00) [16]


> Тогда откуда тебе известен тот самый "определенный размер",
>  который ты хотел оттяпать от файла или наоборот оставить
> в файле ?


Текущий размер файла - максимально допустимый размер.


Сергей М.   (2007-10-19 15:28:00) [17]

Тогда откуда тебе известен тот самый "определенный размер", который ты хотел оттяпать от файла или наоборот оставить в файле ?


pathfinder   (2007-10-19 15:20:00) [18]


> Файл протокола у тебя структурированный ?
> Или содержит записи переменной длины ?


Переменной.


Сергей М.   (2007-10-19 15:16:00) [19]


> pathfinder   (19.10.07 15:08) [46]


Файл протокола у тебя структурированный ?
Или содержит записи переменной длины ?


pathfinder   (2007-10-19 15:08:00) [20]


> > Умеешь "отрезать от файла кусочки"?


Я думал может кто-нибудь умеет:)


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо