ファイルがメモリに収まらない場合は、2 パス プロセスになります。最初のパスでは、ファイルのチャンク (メモリに収まる行数) を読み取り、それらを一時ファイルに逆の順序で書き込みます。だからあなたは持っています:
while not end of input
read chunk of file into array of lines
write lines from array to temporary file, in reverse order
end while
最初のパスが完了すると、temp1.txt、temp2.txt、temp3.txt ... tempN.txt という一連の一時ファイルが作成されます。
最後のファイル (tempN.txt) を追加用に開き、逆の順序でファイルの追加を開始します。だからあなたは持っています:
open fileN for append
fileno = N-1
while fileno > 0
append file_fileno to fileN
fileno--
end while
次に、tempN.txt の名前を変更し、他の一時ファイルを削除します。
ちなみに、手順 2 にはオペレーティング システムが提供する連結ユーティリティを使用できます。たとえば、Windows では、手順 2 を次のように置き換えることができます。
copy /A file4.txt+file3.txt+file2.txt+file1.txt mynewfile.txt
他のプラットフォームにも同様のユーティリティがあります。
ただし、コマンド ラインの長さの制限に遭遇する可能性があります。