Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Усечение файла  (Прочитано 9587 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
Серж
Гость
« : 19-09-2004 14:20 » 

Хочется получить фрагмент файла с заданными указателями начала и конца, не используя операцию копирования. Чтобы обрезать файл в конце, существует функция API SetEndOfFile. Кажется, что операция усечения в начале не намного сложнее, чем в конце, с точки зрения файловой системы, но соответствующей функции как будто бы нет.
А операция копирования может быть очень нежелательна, особенно если файл занимает несколько ГБайт. Кто-нибудь знает решение?
Записан
Серж
Гость
« Ответ #1 : 19-09-2004 14:25 » 

Конечно, фрагмент файла в виде файла, наверное, я неясно сформулировал вопрос.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 19-09-2004 17:50 » 

Серж, Я думаю такой функции нет. Расмотри структуру записи файла на диск. Как известно весь диск разбивается на кластеры. В системе FAT кластер не мог превышать размер 32 кБ. Каждый кластер разбивается на сектора. Каждый сектор в IBM совметимых машинах имеет обычно 512 байт. Файл состоит из записей в цепочку кластеров. При этом необязательно, чтобы кластеры шли друг за другом на физическом пространстве диска. При этом подрузомевается, что все кластера включенные в файл кроме последнего должны быть целые. т.е. не Допускается, чтобы кластер имел частичную запись.
Когда ты вырезаеш из начала файла скажем 15 байт. Ты нарушаеш это условие. Если даже есть такая функция в Виндовсе. Она все равно будет копировать весь файл, чтобы востановить целостность цепочки кластеров.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Серж
Гость
« Ответ #3 : 20-09-2004 06:41 » 

Finch, спасибо. Действительно, если первый кластер всегда должен быть целым, то это невозможно. Попробую найти это в документации по FAT32 и NTFS. А жаль.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 20-09-2004 14:44 » 

Серж, В FAT нету механизма частичной записи в кластер, кроме последнего кластера в файле. Насчет NTFS я думаю что это правило также действует. Потому, что если ввести возможность частичной записи, то получиш больше головных болей , чем пользы. Та же самая дефрагментация записей. Неэффективное использование пространства диска. И еше нужно вести также каталог частичных записей. Плюс к этому потеря времени на отработку всего этого.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 20-09-2004 17:14 » 

кажется проще всего скопировать нужную часть файла в новый файл ...
Записан

Серж
Гость
« Ответ #6 : 21-09-2004 06:56 » 

Алексей1153,  я так и делаю.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines