Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
12 / 1 / 1
Регистрация: 08.11.2008
Сообщений: 41
1

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

14.11.2010, 19:38. Просмотров 1119. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток.
Пишу программу для работы с большими файлами. Файл состоит из блоков размером 512 байт. Каким образом при удалении блоков в середине файла сделать так, чтобы система не передвигала все блоки после удаленных, а просто фрагментировала файл? Количество блоков может быть очень большим и такой сдвиг может занять относительно много времени.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2010, 19:38
Ответы с готовыми решениями:

Winsock2.h:udp фрагментирование данных
Доброго времени суток! Подскажите пожалуйста, какие можно использовать средства (функции) для...

Написать текстовый редактор, в котором продемонстрировать открытие файла, сохранение файла, создание нового файла
№ 5. Написать текстовый редактор, в котором продемонстрировать открытие файла, сохранение файла,...

Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла
Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла

7
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
14.11.2010, 21:18 2
Фрагментировать файл не получиться, т.к. файл на диске лежит кластерами обычно по 4096 или 8192 байт. Постое эффективное решение - удаляемый блок не удалять, а помечать на удаление (устанавливая флаг), чтобы процедура поиска, например, эти блоки просто пропускала (не просматривала). Время от времени производить поджатие файла, физически удаляя помеченные блоки. Как-то так.
0
Заблокирован
15.11.2010, 01:06 3
Нужно еще учесть что универсальной программы не получится , разные ФС (ext3,ext4,reiserFS.NTFS...) ведут себя по разному с файлами
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
15.11.2010, 11:29 4
Каким образом при удалении блоков в середине файла сделать так, чтобы система не передвигала все блоки после удаленных, а просто фрагментировала файл?
Система и не будет никогда передвигать блоки - у нее нет такой функции насколько я знаю

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

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

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

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

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

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

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

вариант 3)
сделать некий аналог файловой системы (но внутри файла)
то есть помечать в каких блоках лежит файл1
какие блоки свободные
при этом будет проблема фрагментации которая решается написанием дефрагментатора
0
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
16.11.2010, 12:34 8
В НТФС есть возможность использовать sparce files(разреженные файлы), в которых предполагается множество нулевых блоков. Можеш под себя адаптировать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2010, 12:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
3)Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.
Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.

Даны два текстовых файла f и f1. Определить совпадают ли компоненты файла f с компонентами файла f1
Добрый день. Помогите пожалуйста написать программу следующий задач. Даны два текстовых файла f...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.