私はファイルにデータを書き込むためにCを使用しています。私が今書いているものよりも長い場合に備えて、ファイルに書かれた前のテキストを消去したい。 ファイルのサイズを小さくしたい場合や、最後まで切り捨てたい場合があります。これどうやってするの?Cでファイルを切り詰めるには?
答えて
Windowsシステムでは何のヘッダ<unistd.h>
はありませんが、まだあなたは、これが0バイトのサイズにファイルを切り捨て
_chsize(fileno(f), size);
これは、お使いのオペレーティングシステムの機能です。標準的なPOSIXの方法は次のとおりです:
open("file", O_TRUNC | O_WRONLY);
を使用してファイルを切り捨てることができます。 – chmike
ファイル全体を切り捨てたい場合は、ファイルを開いて書き込みを行います。それ以外の場合は、ファイルを開いて読み込み、一時変数に保存するファイルの部分を読み込み、必要な場所に出力する必要があります。ファイルの
FILE *file = fopen("filename.txt", "w"); //automatically clears the entire file for you.
切り捨て部分:
FILE *inFile("filename.txt", "r");
//read in the data you want to keep
fclose(inFile);
FILE *outFile("filename.txt", "w");
//output back the data you want to keep into the file, or what you want to output.
これは非常に非効率的な方法です。 @ジョナサン・レフラーの方法がはるかに望ましいですし、あなたのプラットフォームがそれを許可しない場合、クラッシュの場合にデータロスを防止するために少なくとも書き込み/名前変更サイクルを実行してください(データを一時的な名前で新しいファイルにコピーし、 (可能であれば原子的に削除してから古いファイルを削除してください) – derobert
<編集>
ああ、あなたはあなたの投稿を編集し、あなたがCを使用している
ファイル全体を切り捨てファイルを開いたら、モード "w +"で開きます。書き込みの準備ができたら、ファイルを切り捨てます:
FILE* f = fopen("C:\\gabehabe.txt", "w+");
fclose(file);
< /編集>
C++でファイルを切り捨てるために、あなたは単に、それを切り捨てるために、ファイルモードとしてios_base :: TRUNCを使用して、ファイルにofstreamのオブジェクトを作成することができます
ofstream x("C:\\gabehabe.txt", ios_base::trunc);
fopenはファイル "gabehabe.txt"の内容を切り捨て、ファイルポインタを先頭に置くでしょうか?しかし、ファイルポインタを再配置する前にファイルの内容を空にしますか? – Arpith
あなたは、その後、いくつかの長さ(他の回答を提供し、ゼロよりも大きい長さ、)、Pまでのファイルの以前の内容を保存したい場合は、次のようなので、 OSIXは、ジョブに対してtruncate()
とftruncate()
の機能を提供します。
#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);
この名前は、ファイルの短縮という主な目的を示しています。しかし、指定された長さが以前の長さよりも長い場合、ファイルは新しいサイズに拡張されます(ゼロパディング)。 ftruncate()
はファイル記述子で動作し、FILE *
では動作しません。あなたが使用できます。
if (ftruncate(fileno(fp), new_length) != 0) ...error handling...
をしかし、あなたは、単一のファイルにファイルストリーム(FILE *
)とファイルディスクリプタ(int
)を混合すると、アクセスが混乱を招く傾向にあることに注意する必要があります - 問題のいくつかのコメントを見ます。これは最後の手段でなければなりません。
しかし、あなたの目的のために、必要なものはすべて切り捨てる必要があります。そのためには、他の人が与えたオプションで十分です。
2分先に...いいね! –
著しく類似した、ランス!私たちの少なくとも1人はおそらく情報を正しいと思っています。 (
C++ vs 2003ではこのような機能はありますか? 私は何かを逃したかもしれませんが含まれていますか? 私はwでファイルを開くのではなく、すでにファイルを開いています。 – sofr
これはUNIXのいくつかのフレーバーで実行する場合には、これらのAPIが利用可能であるべきである:
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
は私のLinuxボックスの「男の切り捨て」によると、これらはPOSIX準拠しています。現在の長さよりも長い長さを渡すと、これらの呼び出しによって実際にファイルのサイズ(!)が増加することに注意してください。
- 1. C++ iostreamクラスを切り詰める
- 2. wp_rssを切り詰めるには
- 3. Catalystリクエストのアップロード - ファイルの切り詰め
- 4. Qtの切り詰めタブバー
- 5. sqlite3の文字を切り詰める
- 6. PHPでUTF8文字列を切り詰めるには?
- 7. Djangoテンプレートループのテキストを切り詰めるには
- 8. 切り詰められた着信ソケットメッセージ
- 9. C#、GDI + - 四角形が切り詰められるのはなぜですか?
- 10. PDFSharpはC#とWPFで風景ページを切り詰めています
- 11. perlで文字列を特定の長さに切り詰めるには?
- 12. ワイド文字を打った後にファイルが切り詰められます
- 13. コンテナに収まるように文字列を切り詰めるには?
- 14. リストを切り詰めるにはどうすればいいですか?
- 15. パスワードハッシュを14文字に切り詰めるのはなぜですか?
- 16. FileStreamとStreamWriter - 書き込み後に残りのファイルを切り詰めるには?
- 17. 永遠にログを切り詰めています
- 18. 中国語の文字を切り詰める
- 19. divの高さに関してテキストを切り詰めるには?
- 20. T-SQLの丸め、最初はLENGTH + 2に切り詰めます
- 21. Exception.StackTraceでスタックが切り詰められるのはなぜですか?
- 22. WPFの状況によってはコンテキストメニューが切り詰められる
- 23. MySQLはユニークなインデックスを64文字に切り詰めました
- 24. 先頭または末尾の空白を切り詰めるテンプレートフィルタ
- 25. エラーコード1292 - 切り詰められた不正なDOUBLE値 - Mysql
- 26. UIButtonのタイトルが切り詰められます
- 27. JSFで文字列を切り詰めるにはどうしたらいいですか?
- 28. Jqueryで長い順不同リストを切り詰めるにはどうすればいいですか?
- 29. ソル文字列フィールドを10文字に切り詰めるにはどうすればよいですか?
- 30. openconnection()の名前を変更するか、切り詰めますか?
_chsize_s 64ビット:_chsize_s(_fileno(f)、size); – Gyuri
FILE構造体を使用すると_fileno関数が本当に役に立ちます – Carthi
MS-Windowsのみの関数ではありませんか? –