Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26163
Рейтинг: 2127
#1: 2009-12-02 02:49:04 ЛС | профиль | цитата
Ну вот и все, кажется я добил, бетта-версию группы компонентов для работы со структуированными хранилищами. Информации по данному виду интерфейса, крайне скудная, в основном, все для просмотра параметров, а не для работы. Примеры на дельфях отвратительны, дальше одной папки не видит ничего. Пришлось изрядно попотеть над пониманием взаимодействия интерфейсов, но кое-чего получилось. Пока, эта версия корректно работает под дельфями, на FPC старой версии дальше Root папки не читает файлы, хотя, их видит, насколько я понял, то не освобождается корректно интерфейс открытой папки, пес его знает, с чем это связано. Сложность у меня вызвало, так же, переназначения класса интерфейсного стрима на наш стрим, для полного к нему доступа, пока, это осуществляется только через память, и это накладывает ограничение на размер сохраняемого файла, в этом мне нужна помощь более продвинутого специалиста. Я бы был очень рад, если бы мне помог в этом деле Dilma, если, конечно, не очень занят.

Предвижу вопрос -- а для чего это нужно. Первое: это то, что можно иметь виртуальный накопитель в файле, это то, о чем здесь многие просили -- о создании файловых мешков, но все, что мы делали, и отдаленно не напоминает того, что предостваляет нам система. Второе: хранилище имеет нормальную системную таблицу размещения файлов, аналог FAT32 и доступом на уровне интерфейса сиcтемы. На будущее можно будет подумать над созданием и структуры NTFS, система предоставляет такую возможность, надо ее только реализовать. Ну вот, в принципе и все. Жду ваших рецензий.

Пример сейчас выложу, с экспериментальным хранилищем. Для корректной работы необходимо будет полное обновление с SVN
------------ Дoбавленo в 03.07:
Вот полнофункциональный пример, показывающий все возможные варианты работы с хранилищем, включая возможность превращать целые папки в хранилища. Предупреждение! В примере применяется zip сжатие и при попытке объединить хранилища с несжатыми данными возможны вылетания с ошибкой, но тут ошибка самого компонента zip, который не отличает сжатые данные от несжатых и пытается распаковать все, что ему дают. На примере все понятно из меню, также, есть меню контекста и работает Drag&Drop дерева для пересылки без нажатой Ctrl и копирование по Drag&Drop с зажатой Ctrl. Двойной клик запускает файлы в связанной программе.

Не торопясь я сделаю более завершенный пример, это альфа-версия ПО для работы с хранилищами

В архиве лежит переконверченная в хранилище наша папка Example, немного укороченная. Может попытаться поработать с ним

Возможно, кто-то почерпнет из примера что-то, не связанное с хранилищем, там есть много интересных реализаций, о которых регулярно спрашивают на форуме. Например, показано как работать с разными типами меню, в разных режимах
карма: 22

8
файлы: 1sstorage_b100.zip [735.7KB] [340]
Голосовали:Konst, Assasin, Леонид, vovs, filyaxxxcom, 3042, miver, CriDos
Разработчик
Ответов: 4698
Рейтинг: 426
#2: 2009-12-02 15:02:28 ЛС | профиль | цитата
Очень понравилось, только жаль что форма примера называется Form(на панели задач)
карма: 10
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#3: 2009-12-02 15:12:25 ЛС | профиль | цитата
Assasin писал(а):
Очень понравилось, только жаль что форма примера называется Form

Довожу до ума, будет нориально называться. Нужно еще реализовать обратное преобразование SStorage To Folder
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#4: 2009-12-02 15:44:25 ЛС | профиль | цитата
А увеличение скорости упаковкираспаковки возможно? Файлы-хранилища размером 10МБ он читает записывает 1мин
карма: 10
0
Ответов: 8930
Рейтинг: 823
#5: 2009-12-02 15:50:45 ЛС | профиль | цитата
nesco, мне тоже, как и Assasin-у, всё и сейчас!
карма: 19

0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2009-12-02 16:24:04 ЛС | профиль | цитата
Assasin писал(а):
А увеличение скорости упаковкираспаковки возможно? Файлы-хранилища размером 10МБ он читает записывает 1мин

а должен 1 секунду
------------ Дoбавленo в 16.33:
не понятен смысл метода:

#pas
destructor TSCustomStg.Destroy;
begin
FStorage := nil;
inherited;
end;

а это каким образом без RunTime error работает?

destructor TSStgFile.Destroy;
begin
inherited;
if (FParent <> nil) and not (FParent is TSStorage) then FParent.Free;
end;

destructor TSStgFolder.Destroy;
begin
inherited;
FStorage := nil;
if (FParent <> nil) and not (FParent is TSStorage) then FParent.Free;
end;

лишняя проверка

  if Len > 0 then
begin
for I := 0 to Len - 1 do

это тоже код с бомбой аналогично деструкторам выше:

#pas
if Mode = stCreate then
StgCreateDocfile(PWChar(FileName), Mode, 0, FStorage)
else
StgOpenStorage(PWChar(FileName), nil, Mode, nil, 0, FStorage);
inherited Create(FileName, FStorage);

вообще там каждый метод в весьма экстремальном стиле написан... nesco, откуда такие исходники взял?
карма: 27
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2009-12-02 16:47:23 ЛС | профиль | цитата
Dilma писал(а):
nesco, откуда такие исходники взял?

Да на королевстве такой был, подделал по себя. Честно, то я не сильно еще силен в переназначении классов и поведении их в динамике. Ты можешь довести это дело до ума, чтобы убрать всякие неясности и предполагаемые баги, все будут только благодарны
Я могу выложить исходник с королевства, если нужен
------------ Дoбавленo в 16.49:
Если это не так просто сделать, то может другой механиз взаимодействия с интерфейсом попробовать написать (это я для себя)
------------ Дoбавленo в 17.53:
Вот, сделал обратное преобразование, но нужно обновление, там в Enumeratore добавлен необходимый аргумент полного пути
------------ Дoбавленo в 22.18:
Я так подумал, что стоит пееделать оболочку интерфейса, оставив без изменения настроенный функционал компонентов. Просто, нашел пример более простого доступа к интерфейсу, без всяких заморочек с классами
карма: 22

0
файлы: 1sstorage_2.sha [91.6KB] [394]
Ответов: 16884
Рейтинг: 1239
#8: 2009-12-04 09:18:10 ЛС | профиль | цитата
Леонид писал(а):
nesco, мне тоже, как и Assasin-у, всё и сейчас!
и (желательно) в алфавитном порядке - когда Draw идет первым, а DataBase где-то в конце списка, то ...
Я про пример.
ИМХО.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#9: 2009-12-04 09:59:47 ЛС | профиль | цитата
Tad писал(а):
Я про пример

Этого невозможно выдавить из компонента файлового энумератора, но я добавил спрециальное свойство Sort в TreeVieverTrain. Его можно использовать, но оно не определяет папки это, или файлы, а сортирует в дереве все подряд. Погодите чуть чуть, не торопите меня, я сейчас переделываю интерфейс компонентов, это очень мутороное дело, там очень много тонкостей со взаимодействием различных интерфейсов, затем все это обновим и будем доделывать пример
карма: 22

0
Ответов: 758
Рейтинг: 112
#10: 2009-12-04 11:23:39 ЛС | профиль | цитата
nesco писал(а):
Предвижу вопрос -- а для чего это нужно. Первое: это то, что можно иметь виртуальный накопитель в файле, это то, о чем здесь многие просили -- о создании файловых мешков, но все, что мы делали, и отдаленно не напоминает того, что предоставляет нам система. Второе: хранилище имеет нормальную системную таблицу размещения файлов, аналог FAT32 и доступом на уровне интерфейса системы. На будущее можно будет подумать над созданием и структуры NTFS, система предоставляет такую возможность, надо ее только реализовать. Ну вот, в принципе и все. Жду ваших рецензий.


Может чего не понял, то сразу извиняюсь
Когда-то давно набрел на программку MyLib, с ядром бесплатной БД, где можно структурировано хранить файлы
fdb - база данных, предназначенная для специальных проектов, требующих скорости обработки данных, универсальности структур и удобства разработки.

Преимущества fdb:
1. Принципиальное значение универсальности структур данных, а также возможности их комбинирования и усложнения.
2. Оптимизация функций ядра для обеспечения наилучших показателей скорости обработки данных
3. Формат файла, приемы хранения информации в котором, позволяют не только сократить размер файла, но и обеспечить возможность произвольного доступа.
4. Два сосуществующих метода программирования для fdb, сочетающие удобство и скорость разработки. Использование объектно-ориентированного программирования при работе с fdb
5. Компактность и переносимость БД. Файл библиотеки fdb.dll и модуль поддержки динамических типов borlndmm.dll имеют общий размер порядка 100Кб. fdb не требует установки в систему или регистрации своих компонентов, не зависит от установленных в системе модулей.
6. Полный справочник по функциям и объектной модели fdb, включая уроки для обучения "с нуля".

http://fdb.linesoft.org/

Может чем поможет

карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#11: 2009-12-04 12:41:07 ЛС | профиль | цитата
miver писал(а):
с ядром бесплатной БД, где можно структурировано хранить файлы

Теже фаберже, только вид сбоку. Там собственная релизация ядра, у нас попытка использовать системный интерфейс для работы с файловыми структурами
карма: 22

0
Ответов: 1841
Рейтинг: 369
#12: 2009-12-05 17:34:49 ЛС | профиль | цитата
1) Какой максимально допустимый размер добавляемого файла?
2) В схеме лучше убрать чтение содержимого выделенного файла или выдавать окно с предложением показать содержимое файла...
карма: 1
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#13: 2009-12-05 22:45:44 ЛС | профиль | цитата
CriDos писал(а):
Какой максимально допустимый размер добавляемого файла?

В данной реализации компонентов, зависит от размера памяти компа, а так -- предел у интерфейса 2Гб
CriDos писал(а):
В схеме лучше убрать чтение содержимого выделенного файла или выдавать окно с предложением показать содержимое файла...

Ну это же пример.
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#14: 2009-12-05 23:37:50 правка | ЛС | профиль | цитата


Редактировалось 5 раз(а), последний 2021-06-24 07:04:02
карма: 0

0
Ответов: 1841
Рейтинг: 369
#15: 2009-12-05 23:41:23 ЛС | профиль | цитата
Сообщение выше моё...
карма: 1
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)