2011-07-13 4 views
0

私は窓にファイルを持っています。私はC++で書いています。私はファイルの終わりからいくつかのバイトを削除する必要がある問題があります。私はifstreamを使用していますが、これらの文字を取り除く方法はわかりません。単純に '\ 0'をファイルに入れますか?バイナリファイルを変更する

+2

iofstream?本気ですか? –

答えて

2

(): http://linux.die.net/man/2/truncate

のWindowsマシンでは、SetEndOfFileを(使用):

http://msdn.microsoft.com/en-us/library/aa365531%28v=vs.85%29.aspx

はどちらも、OS依存の呼び出しです。

+0

ウィンドウにSetEndOfFileを使用する。私は私が終わりたいと思う場所に捜すことを得なければならない、そして私は方法を使用する?もう一度開いてEOFに行くと、新しいサイズになりますか? –

+0

updated ...リンクを参照してください。あなたがあなたの 'EOF'をしたい場所に捜す必要があると書かれています。 –

2

なぜファイルを切り捨てませんか? chsize()メソッドを見てください。 Linuxマシン、使用TRUNCATEで

+0

ifstream APIのifstream –

+0

はiostreamsの一部ではありません。ファイルと呼ばれる別のメソッドです。ファイルのサイズを変更するので、末尾のバイトを削除します。これはおそらくあなたが望むものでしょうか? ) – Nim

+0

ウィンドウにchsizeを使用する。もう一度開いてEOFに行くと、新しいサイズになりますか? –

2

ファイルのサイズを移植的に変更することはできません。それを行う唯一の方法は、ファイルを一時ファイルにコピーし、元のファイルを削除して一時ファイルの名前を変更することです。

ファイルを切り捨てる場合に限って、WindowsとUnixの両方(ただし必ずしも他のシステムではない)は、これを行うことができるシステムレベルの機能を持っていますが、それをサポートする標準には何もありません。最後に他のバイトを削除しなければならない場合は、WindowsやUnixのどちらでも許可されません(ただし、少なくとも特定の場合は他のシステムでも同じです)。

+0

私は最終的にそれを行う必要があり、途中で始めることはできません。私の質問は、私がWindowsでそれを使用している場合は、OSの他のすべての内部パラメータが変更のために更新されますか? –

+0

ブーストを使用したい場合、1.46は移植性を可能にする 'resize()'メソッドをサポートしています。なぜなら、最初から謎に包まれていなかった理由です... – Nim

+0

@Romanシステムに依存する機能では、システムがそれを指定するものを実行します。システム仕様でファイルを切り捨てると指定すると、ファイルが切り詰められます(またはシステムにバグがあります)。 –

関連する問題