Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запись множества файлов без фрагментов, как освободить место под целый файл? 
V
    Опции темы
asmdzen
Дата 30.7.2011, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


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

Репутация: 3
Всего: 5



volatile, как-то можно от нее избавится? я просто хочу избежать фрагментации файлов, а получается что просто ничего не делаю.

оказалось мой подход дает тот же результат, т.е. открываю файл (или создаю) делаю seek на нужный размер - 1, пишу ноль, в результате файл нужного размера заполненный нолями.
PM MAIL   Вверх
volatile
Дата 30.7.2011, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 16
Всего: 85



asmdzen, там может и не sparse file. По умолчанию эта фича выключена. Наоборот чтобы включить надо сделать кое-какие движения.

Если же к первоначальному вопросу про нефрагментированный файл, то в МСДН есть инфа как создать нефрагментированный файл средствами winapi. Начните отсюда
но 
Цитата(asmdzen @  28.7.2011,  20:00 Найти цитируемый пост)
есть какое нибудь кросс платформенное решение 

не знаю.

PM MAIL   Вверх
boostcoder
Дата 30.7.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(volatile @  30.7.2011,  02:19 Найти цитируемый пост)
Называется sparse file

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

asmdzen, эта тема затянулась на три страницы, а я так и не могу понять чего конкретно ты пытаешься добиться, и почему постоянно это "добивание" у тебя новое smile 

Это сообщение отредактировал(а) boostcoder - 30.7.2011, 11:33
PM WWW   Вверх
volatile
Дата 30.7.2011, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 16
Всего: 85



Цитата(boostcoder @  30.7.2011,  11:31 Найти цитируемый пост)
мне кажется, вы заблуждаетесь.

Насчет того что там "sparse file" - возможно. Я просто хотел сказал что есть такая фича, и про нее забывать не стоит.
Посмотреть/поменять атрибут "sparse file" можно в файловых менеджерах. Например FAR позволяет это сделать для любого файла.

Цитата(boostcoder @  30.7.2011,  11:31 Найти цитируемый пост)
если для файла зарезервировано некое кол-во блоков, то никакой другой файл их занять не сможет

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

PM MAIL   Вверх
asmdzen
Дата 30.7.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


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

Репутация: 3
Всего: 5



Цитата(boostcoder @  30.7.2011,  11:31 Найти цитируемый пост)
не могу понять чего конкретно ты пытаешься добиться

пишутся несколько тон файлов сразу, кусками по несколько КБ, если я просто создам эти файлы и начну писать то у меня такое подозрение что система их хорошенько перемешает. Насколько я понял в NTFS файл разделен на блоки размером в 64КБ, получается 64КБ от одного файла, следующие от другого, меня это не устраивает, хочется записывать файлы с минимум фрагментов.

Цитата(boostcoder @  30.7.2011,  11:31 Найти цитируемый пост)
почему постоянно это "добивание" у тебя новое

не понял вопрос, или это не вопрос )

Цитата(volatile @  30.7.2011,  11:56 Найти цитируемый пост)
Система сама определяет какие блоки выделить для файла, и повлиять на этот выбор стандартными средствами, имхо, нельзя.

все же, IMO, если зарезервировать для файлов весь размер сразу то фрагментации будет меньше.

Добавлено через 6 минут и 27 секунд
поведение как у sparse файлов, т.е. весь файл как бы заполнен нолями, но при попытке растянуть файл на 100ГБ при свободных 50 работать не хочет, со sparse файлами вроде должно было прокатить.
PM MAIL   Вверх
volatile
Дата 30.7.2011, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 16
Всего: 85



Цитата(asmdzen @  30.7.2011,  12:26 Найти цитируемый пост)
со sparse файлами вроде должно было прокатить. 

asmdzen, для проверки, сразу после резервирования места для файла, вызовете функцию GetCompressedFileSize ();
Если размер равен тому что зарезервировали, то значит все нормально. Это не "sparse file" и не сжатый файл.


PM MAIL   Вверх
asmdzen
Дата 30.7.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


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

Репутация: 3
Всего: 5



Цитата(volatile @  30.7.2011,  13:01 Найти цитируемый пост)
Это не "sparse file" и не сжатый файл.

наконец то положительный результат ))
вернул размер до байта.

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


Эксперт
****


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

Репутация: 16
Всего: 85



asmdzen, посмотрите как это делается в бусте
Код

BOOL resize_file_api(const wchar_t* p, boost::uintmax_t size)
  {
    HANDLE handle = CreateFileW(p, GENERIC_WRITE, 0, 0, OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL, 0);
    LARGE_INTEGER sz;
    sz.QuadPart = size;
    return handle != INVALID_HANDLE_VALUE
      && ::SetFilePointerEx(handle, sz, 0, FILE_BEGIN)
      && ::SetEndOfFile(handle)
      && ::CloseHandle(handle);
  }

Подробнее здесь.

Можете взять и переделать как вам будет удобно, без лишнего закрытия/открытия файлов.


PM MAIL   Вверх
boostcoder
Дата 30.7.2011, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(volatile @  30.7.2011,  11:56 Найти цитируемый пост)
Даже если вы реально заняли какое-то кол-во блоков, не факт что эти блоки расположены не фрагметнировано.
Система сама определяет какие блоки выделить для файла, и повлиять на этот выбор стандартными средствами, имхо, нельзя.

это ясно. я лишь хотел сказать, что зарезервированное пространство для файла, не значит что оно sparse.

PM WWW   Вверх
asmdzen
Дата 30.7.2011, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


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

Репутация: 3
Всего: 5



Цитата(volatile @  30.7.2011,  15:33 Найти цитируемый пост)
Можете взять и переделать как вам будет удобно, без лишнего закрытия/открытия файлов.

не хочется под винду именно писать, к тому же мой вариант не на много хуже:
Код

    int h = open("a.txt", O_CREAT|O_TRUNC|O_WRONLY|O_BINARY, 0644);
    lseek(h, size-1, SEEK_SET);
    DWORD x = 0;
    write(h, &x, 1);
    close(h); // хотя можно с ним делать уже что угодно

результат такой же как от boost::resize_file, по крайней мере я разницы не вижу.
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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