Cプログラムを使用してファイルから少数の文字を削除するにはどうすればよいですか?Cのファイルから文字を削除
定義済みの関数が見つかりませんでした。
目的を理解するために、ソケットを介してファイルを送信しようとしています.Nバイトが正常に送信された場合、ファイルからそれらのバイトを削除します。最後に、ファイルは空になります。 これを他の方法で効率的に行う方法はありますか?彼らは終わりにしている場合は プラディープ
Cプログラムを使用してファイルから少数の文字を削除するにはどうすればよいですか?Cのファイルから文字を削除
定義済みの関数が見つかりませんでした。
目的を理解するために、ソケットを介してファイルを送信しようとしています.Nバイトが正常に送信された場合、ファイルからそれらのバイトを削除します。最後に、ファイルは空になります。 これを他の方法で効率的に行う方法はありますか?彼らは終わりにしている場合は プラディープ
おかげで、適切な長さにファイルを切り詰めます。そうでない場合は、ファイルを書き直す必要があります。
あなたの方法は大量のファイルではかなり効率が悪いです。ファイルの残りの部分を最初からいくつかのバイトにコピーする必要があるため、コストがかかります。私はむしろファイルの外側のどこかに "現在の送信位置"を記録し、その情報を更新したいと思います。そうすれば、残りのファイルを頻繁にコピーする必要はありません。
私は同じ考えをしていましたが、(ファイルを送信している)クライアントがクラッシュするとどうなりますか? – Blacklabel
ハードディスクのバッファがフラッシュされる前に電源が切断されたらどうなりますか?同じ問題。ファイルの先頭からバイトを削除している間に電源が切断されたらどうなりますか?ファイルデータが破損する。送信しているサーバーに、受信したバイト数とその時点から送信するバイト数を問い合わせるほうがよいでしょう。 – cdhowie
@Blacklabel:「現在の位置」を時々同期する必要があります。そして、おそらくクライアントは要求(HTTP Content-Range/206のような)に希望の位置を含めるべきです。 – Vlad
ファイルの先頭からバイトを削除する簡単な方法はありません。ファイルをトリムしたい場所から始め、そこからファイルの最後まで読み込み、ファイルの先頭に書き込む必要があります。
すでに他のファイルにファイルに書き込んだバイト数をトラッキングするだけの方がいいかもしれません。
まだ送信していないデータの先頭を指すインデックスを使用する必要があります。 あなたが送信したものを削除する必要はありません、それらを渡すだけで、ファイル全体を送信するときにそれを削除します。
charの文字列が1つではない場合は、理由を教えてください。fseek();
標準Cにはファイルを切り捨てる機能はありません(長さ0以外)。 POSIXはWindowsと同様に動作します。 –