2012-04-05 2 views
0

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

, и если он изменится, есть ли способ узнать, какие нули являются нулями заполнения?

thanx!

+0

нули довольны, как и те, двое, тройки и т. Д. Добавление нулей в файл изменит его содержимое. – NealB

+0

Переопределение колеса? –

ответ

0

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

В вашем конкретном случае заполнение файла - плохая идея.

Если у вас был фиксированный размер блока, в который должна входить каждая часть файла, можно было бы поместить часть файла в байты, указывающие, сколько байтов было добавлено. Например, если вы добавили семь байтов в качестве отступов, каждый байт заполнения должен быть 0x07. Когда вы позже рекомбинируете части, ваша программа сначала должна будет удалить прокладку. В данном примере он будет читать последний байт части, т. Е. 0x07, и заключить, что семь байтов должны быть удалены из конца файла.

Есть две проблем с этим подходом:

  • максимального заполнение можно достигнуть, 0xFF = 255 байт
  • если ни отступы не требуются вам придется добавить полный блок манекена прокладки, потому что ваша программа не может различать байт дополнений и исходный контент. Если часть файла закончилась на 0x01, и никакое дополнение не потребовалось, ваша программа объединения удалит последний бит из сегмента, тем самым повредив файл.

Если вы делаете это только ради удовольствия, вы можете взглянуть на исходный код программы split, которую вы можете найти на BSD или GNU/Linux. Подсказка: прокладка не требуется.

Смежные вопросы