Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение фалов в одном, с возможностью добавления/удаления 
:(
    Опции темы
dershokus
Дата 9.11.2012, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 Здравствуйте. Стоит задача хранения многих файлов в одном (просто чтобы было не 1000 а 1 файл - для удобства). Так же нужно реализовать возможность добавления/удаления/редактирования. Как это лучше сделать?
 Я вижу несколько вариантов решения:

1. Так как сделано в zip архиве,  но без сжатия. тоесть хранить header с размером файла (ну и атрибутами). Для быстрого поиска начала следующего файла нужно будет проходить от первого и прибавлять размер текущего файла чтобы наткнуться на следующий header.
2. Сделать индексный файл где будут храниться все имена и адрес начала файла, но тут получается, что будет 2 файла, а не один. Так же можно эти header'ы или index'ы хранить в начале(конце?) файла, но при каждом изменении придется сдвигать весь файл или индексы в конце.

Может я чего-то не вижу? Есть идеи о улучшении метода?
Писать буду на c/c++ хотя здесь это и совсем не важно...
PM MAIL   Вверх
Silent
Дата 9.11.2012, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



Возьми в качестве основы любую простую файловую систему, например FAT, и на ее основе делай свою структуру мега-файла
PM MAIL   Вверх
dershokus
Дата 9.11.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



На сколько я понял в fat используется таблица кластеров(занят, свободен) которая по большому счету формируется на этапе форматирования. У меня размер хранилища файла динамический => сделать некую статическую таблицу кластеров не получится (нужно тоже динамическую).
Или я что-то не понимаю?
PM MAIL   Вверх
Silent
Дата 9.11.2012, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



все правильно понимаешь, но в этом проблемы нет - делай ее тоже динамической. делаешь эту таблицу определенного размера, в последней ячейке - либо NULL, либо ссылка на следующую "таблицу кластеров"
PM MAIL   Вверх
Akina
Дата 9.11.2012, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 20
Всего: 454



dershokus, используй "размыв" FAT. 
Т.е. хранилище у тебя прирастает блоками, каждый блок содержит 1 служебный сектор (настоятельно советую), 1 сектор FAT и сколько там нужно секторов. Скажем для 32-битной FAT это будет 128 кластеров, если кластер по 1 сектору, то 128 секторов, при размере сектора в 512 байт размер блока составит 65 кбайт.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Silent
Дата 9.11.2012, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 9



Хотя можно не изобретать велосипед самому, а воспользоваться готовыми - например, взять из virtualbox модули по работе с виртуальными винтами. Форматы vdi, vmdk и vhd используются давно, есть стандарты (vmdk, например), или, даже opensource-модули для работы с ними, например, qemu
PM MAIL   Вверх
dershokus
Дата 9.11.2012, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я извиняюсь за некоторую дубовость, но на вики читать о структуре FAT достаточно сложно %)
Тупой вопрос: где хранится информация о файле? Тоесть имя и все прочее. На сколько я понимаю рядом с данными о файле?
А что будет если отредактированный файл разростется и не будет вмещаться в чанк/блок? Конечно можно стереть его с предыдущего чанка и приделать еще один... 
PM MAIL   Вверх
baldina
Дата 9.11.2012, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(dershokus @  9.11.2012,  12:41 Найти цитируемый пост)
Стоит задача хранения многих файлов в одном (просто чтобы было не 1000 а 1 файл - для удобства)

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

может быть вам требуется не файлы хранить, а данные программы, которые пока что разбросаны по разным файлам? это несколько иная задача, решается хранением данных в одной сложной структуре данных которая сериализуется в файл и считывается оттуда
PM MAIL   Вверх
dershokus
Дата 9.11.2012, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Silent, Ну велосипед конечно предпочтительней т.к. можно будет заточить под себя. Но вообще все выглядит интересно, главное чтобы поиск информации был еще быстрый. Попробую реализовать smile

Добавлено через 4 минуты и 34 секунды
baldina, Нет нет. Именно фалы, причем достаточно маленькие и с динамическим размером. Это не просто сериализация массива в файл (ну к примеру).
PM MAIL   Вверх
baldina
Дата 9.11.2012, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(dershokus @  9.11.2012,  13:26 Найти цитируемый пост)
 где хранится информация о файле? Тоесть имя и все прочее. На сколько я понимаю рядом с данными о файле?

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

Добавлено через 12 минут и 34 секунды
это почитайте, там все подробно рассказано, есть код на C. 
PM MAIL   Вверх
ksnk
Дата 9.11.2012, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



dershokus, А почему бы не взять tar? 
Каталог к тару формируется при первом обращении. В дальнейшем - храниться в памяти, как в обычной файловой системе. Новые 'файлы'  дописываются в конец тара. Удаляемые файлы помечаются специальным флагом. Периодически, когда размер собственно файла становится на сколько-то больше, чем мог бы, производится "перепаковка" тара с выкидыванием удаленных. 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
dershokus
Дата 9.11.2012, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, по большому счету задача выраждается к реализации tar или чего-то схожего. По всей видимости становится больше лабараторной, нежели прикладной smile
Всем спасибо.
PM MAIL   Вверх
baldina
Дата 9.11.2012, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата(dershokus @  9.11.2012,  15:11 Найти цитируемый пост)
задача выраждается к реализации tar или чего-то схожего

но tar и zip и т.п. уже изобретены, есть библиотеки
PM MAIL   Вверх
_Y_
Дата 9.11.2012, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 8
Всего: 34



Чтоба не разбивать таблицу на части, можно писать ее в конце файла. Поскольку таблица обновляется чаще, чем основное "тело данных", это даст некоторую выгоду ИМХО - при изменении размера таблицы не придется двигать данные. Если же само тело нужно удлиннить, переписывать придется только коротенькую таблицу.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


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

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


 




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


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

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