Доброго времени суток!
Стоит задача следующего содержания: из некоторого файла необходимо удалить первые несколько байт, причем сделать это надо быстро, размер файла заранее даже предположительно не известен (плавает в диапазоне от нескольких байт до нескольких гигабайт).
Может сталкивался кто? Короче говоря прошу помощи в решении данного вопроса [Ответ]
The_God 15:56 28.11.2007
создай второй файл и скопируй пропустив первые N байт [Ответ]
[ReBoot] 15:59 28.11.2007
Сообщение от [ReBoot:
] (плавает в диапазоне от нескольких байт до нескольких гигабайт)
нельзя так, очень большие тормоза будут на больших файлах.
[Ответ]
[ReBoot] 16:25 28.11.2007
Как вариант - сдвинуть дескриптор, но страшновато, и как это сделать незнаю...
[Ответ]
MHC 16:46 28.11.2007
есть подозрения, что курить в сторону MapViewOfFile. но не уверен
[Ответ]
Part!zan 20:41 28.11.2007
[ReBoot], нельзя просто и быстро убить байты от начала файла. От конца - легко.
[Ответ]
MHC 22:11 28.11.2007
аффтар! какие дополнительные условия? операционная система, файловая система, среда разработки, что значит "причем сделать это надо быстро", какими цифрами ограничен размер файла?
[Ответ]
[ReBoot] 22:44 28.11.2007
Windows
NTFS || FAT
С++ Builder
потребность в такой операции может возникнуть несколько раз в секунду.
пара байт - пара гигабайт
Part!zan! Можно и с конца но это более неудобный для меня вариант. Расскажи как, пожалуйста.
[Ответ]
MHC 23:23 28.11.2007
Сообщение от [ReBoot]:
Windows
NTFS || FAT
С++ Builder
потребность в такой операции может возникнуть несколько раз в секунду.
пара байт - пара гигабайт
Part!zan! Можно и с конца но это более неудобный для меня вариант. Расскажи как, пожалуйста.
из начала файла если и можно вырезать куски, то один фиг — не без грязных хаков. но, сдаётся мне, загнался ты. наверняка есть альтернативные варианты. и их туева хуча. например, реализовать блочный, фрагментированный формат файла, или в конец писать и вырезать от туда куски данных. если нужно уменьшить размер файла (читай "конец отрубить") - делается сначала SetFilePointer, а затем SetEndOfFile. это как вариант. функции апишные. в MSDN'е всё описано. да и у борланда, думаю, есть вполне исчерпывающая документация этих функций. посмотри, может, подойдет
[Ответ]
Part!zan 23:31 28.11.2007
[ReBoot], с конца - вообще просто. Перемещаешь в нужное место указатель и обрубаешь по нему файл. Все происходит мгновенно. Для файлов, открытых через CreateFile, это делается с помощью SetEndOfFile. А чтобы обрубить в начале придется весь файл переписывать.
[Ответ]