Как удалить последние 2 строки огромного файла, не читая его - PullRequest
1 голос
/ 27 сентября 2011

У меня есть файл размером 100 ГБ, и мне нужно удалить последние две строки. Я не хочу читать из него, потому что потребуется около часа, чтобы разобраться в этом, так что sed, кажется, не вариант.

Мой диск слишком мал, чтобы можно было скопировать этот файл.

Какие у меня есть варианты?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

В C / POSIX вы должны иметь возможность использовать fseek с опцией SEEK_END для небольшого резервного копирования с конца файла (скажем, 512 байт), а затем read этих 512 байт в память.

Исходя из этого, вы можете точно определить, где начинается вторая последняя строка, а затем использовать truncate или ftruncate для фактического усечения файла в этой точке.

Если последние двастроки больше 512 байт (т. е. начало второй последней строки не отображается в прочитанном вами фрагменте), просто увеличьте значение до 1024 и повторите попытку.Продолжайте, пока не найдете его.

0 голосов
/ 27 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...