Форум программистов, компьютерный форум CyberForum.ru

Фрагментирование файла - C++

Войти
Регистрация
Восстановить пароль
 
sergio1
 Аватар для sergio1
12 / 1 / 1
Регистрация: 08.11.2008
Сообщений: 41
14.11.2010, 19:38     Фрагментирование файла #1
Всем доброго времени суток.
Пишу программу для работы с большими файлами. Файл состоит из блоков размером 512 байт. Каким образом при удалении блоков в середине файла сделать так, чтобы система не передвигала все блоки после удаленных, а просто фрагментировала файл? Количество блоков может быть очень большим и такой сдвиг может занять относительно много времени.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2010, 19:38     Фрагментирование файла
Посмотрите здесь:

C++ Связь заголовочного файла и файла с описанием класса.
Winsock2.h:udp фрагментирование данных C++
C++ С помощью очереди за один просмотр файла напечатать элементы файла в заданном порядке
Маска имени файла файла C++ Builder
Сборка библиотеки и ошибка "fatal error LNK1149: имя выходного файла совпадает с именем входного файла" C++
Дано имя файла целых чисел. Найти количество элементов, содержащихся в данном файле. Если файла с таким именем не существует, то вывести –1 C++
Вывести на экран символы первого файла с позиций, указываемых числами из второго файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
14.11.2010, 21:18     Фрагментирование файла #2
Фрагментировать файл не получиться, т.к. файл на диске лежит кластерами обычно по 4096 или 8192 байт. Постое эффективное решение - удаляемый блок не удалять, а помечать на удаление (устанавливая флаг), чтобы процедура поиска, например, эти блоки просто пропускала (не просматривала). Время от времени производить поджатие файла, физически удаляя помеченные блоки. Как-то так.
unStatiK
Заблокирован
15.11.2010, 01:06     Фрагментирование файла #3
Нужно еще учесть что универсальной программы не получится , разные ФС (ext3,ext4,reiserFS.NTFS...) ведут себя по разному с файлами
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
15.11.2010, 11:29     Фрагментирование файла #4
Каким образом при удалении блоков в середине файла сделать так, чтобы система не передвигала все блоки после удаленных, а просто фрагментировала файл?
Система и не будет никогда передвигать блоки - у нее нет такой функции насколько я знаю

Добавлено через 56 секунд
А еще лучше - опиши задачу полностью
sergio1
 Аватар для sergio1
12 / 1 / 1
Регистрация: 08.11.2008
Сообщений: 41
15.11.2010, 20:34  [ТС]     Фрагментирование файла #5
Я хочу написать что-то типа формата файла-контейнера, в котором могут храниться другие файлы. То есть архив, но без сжатия данных. В начале файла хотелось бы записать блок со структурой контейнера, а дальше - сами данные. И вот проблема с удалением данных - приходится двигать все данные после удаленного блока.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,302
16.11.2010, 00:03     Фрагментирование файла #6
Так-то можно попробовать реализовать в качестве упражнения, но где это принесёт реальную пользу- неизвестно.

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

Так, теперь удаление какого-либо куска из СТРОКИ можно реализовать без проблем. Изучаем списки.

Так, работа с файлом свелась бы к работе с массивом символов типа unsigned char. Редактирование и прочее. Непросто, особенно если в разных участках памяти строка, но реализуемо всё же.

А потом понадобилось бы реализовать код (или отдельно экзешник), который по окончании работы со строкой перегонял бы её в файл-результат. Вот тут бы время терялось. Но! Коль скоро работа со строкой уже закончена (редактирование, вырезание или чего там) то потеря времени уже некритично было бы.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
16.11.2010, 11:53     Фрагментирование файла #7
Я хочу написать что-то типа формата файла-контейнера, в котором могут храниться другие файлы. То есть архив, но без сжатия данных.
Для чего тебе такой формат ?

Использовать библиотеку для работы с ZIP-архивами ( разумеется без сжатия данных ) можно ?

И вот проблема с удалением данных - приходится двигать все данные после удаленного блока.
вариант 2) в принципе уже озвучили
помечать свободные блоки по 512 байт
тогда не придется сдвигать
отдельно написать процедуру сжатия всего архива

вариант 3)
сделать некий аналог файловой системы (но внутри файла)
то есть помечать в каких блоках лежит файл1
какие блоки свободные
при этом будет проблема фрагментации которая решается написанием дефрагментатора
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2010, 12:34     Фрагментирование файла
Еще ссылки по теме:

Написать программу по разбивке и анализу содержимого файла отчета работы ПО (log-файла) C++
C++ Создать два файла, первый содержит элементы исходного файла с нечетными номерами, а второй с четными
Загрузка данных из файла с возможностью выбора файла C++
C++ Как, прочитав из файла один символ, выявить факт окончания файла
C++ Определить свойства файла / Получить идентификатор файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
16.11.2010, 12:34     Фрагментирование файла #8
В НТФС есть возможность использовать sparce files(разреженные файлы), в которых предполагается множество нулевых блоков. Можеш под себя адаптировать.
Yandex
Объявления
16.11.2010, 12:34     Фрагментирование файла
Ответ Создать тему
Опции темы

Текущее время: 04:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru