2014-01-03 4 views
0

Я искал способ объединить большие файлы (несколько гигабайт) вместе, не переписывая один из файлов. Я уверен, что ОС делает это внутренне, когда манипулирует главной файловой таблицей. Это чисто для внутреннего приложения, где скорость критически важна даже ценой целостности данных (в случае риска для недокументированных API). Приложение обрабатывает большое количество высокоскоростных многоканальных данных Ethernet, где коррумпированная единица работы (файл в этом случае) не окажет большого влияния на общие результаты обработки.Объединить большие файлы с помощью API ядра Win NT

В данный момент при объединении файлов A и B прилагаемое усилие равно: A[Read] + B[Read] + C [Write] `. Кто-нибудь из вас, гуру NT, пролил свет на то, как обойти это, чтобы напрямую добраться до MFT?

Мне не удалось получить какие-либо сведения о том, какой API следует исследовать и по достоинству оценят некоторые указатели. Хотя приложение управляется, я с удовольствием изучаю собственные API и даже настраиваю легкие виртуальные машины для тестирования.

Заранее спасибо.

+0

То, что вы предлагаете, невозможно во многих файловых системах, которые требуют, чтобы каждый кластер, принадлежащий файлу, был смежным, за исключением последнего. –

+1

Открыть A, установить указатель файла в конец файла и записать содержимое B. Нет смысла взломать MFT. Потеря A в процессе, особенно при ошибке, обычно не считается очень приемлемой. –

ответ

0

Если вы добавления файла B в файл А, все, что вам нужно сделать, это открыть файл А для записи + добавить, искать конец файла, а затем читать и писать B А.

Если вы хотите создать файл C в качестве конкатенации файлов A и файла B, тогда вам нужно будет создать файл C и скопировать A в C, а затем B в C.

Нет никаких ярлыков.

0

Это не будет файловая система. Файловые системы выделяют пространство для файлов в терминах кластеров и блоков данных, а не в байтах. Объединение двух файлов, подобных этому, будет работать только в том случае, если они оба являются кратными размеру кластера, а FS может иметь другие предположения о том, как блоки распределяются для файлов под обложками. Вы можете сделать это самостоятельно в файловой системе, если вы демонтируете его и написали инструмент для прямого управления всеми структурами файловой системы. Но вы рискуете повредить весь диск, если вы это сделаете, а не только один файл.

0

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

Затем, когда данные необходимы, используйте индекс, чтобы объединить данные для создания одного нового файла? Значит, вы только когда-либо делаете дорогостоящее слияние файлов по требованию?