
C言語の話です。
はじめ、ファイルを"w"モードで開き、
fprintfで繰り返してデータをファイルに書き込んで、
ある条件(何らかのエラーがおきた場合)には今まで書き込んだものは
すべて 消去します。
(つまり、ファイルを再び空にするという意味です。)
この場合、もうこれ以上ファイルに書き込むことはしないで、プログラムは終了します。
書き込んだものを消去するには、どのようにすればよいですか。
「一度ファイルを閉じて、再び"w"モードで開き、また閉じる」
というのが私が考えるいちばん簡単な方法なんですが、
ファイルの中身を消去するために開いたり閉じたりしなきゃいけないの?
という気もします。
本で見ると、freopenという関数が使えそうな気もしますが、
わたしはこの関数を使ったことがありませんし、
解説を読んでも、本当にこのような場合に使うものなのかな、
という感じがします。
そんなにプログラミングに詳しくないので、やさしくご回答いただけるとたすかります。
No.4ベストアンサー
- 回答日時:
その時点で開いているファイル(書き込み中のファイル)
のFile Descripterを閉じた後、
---
fclose(oldfp);
FILE *fp = fopen(filename, "w");
fclose(fp);
---
とするか、
---
freopen(filename, "w", oldfp);
---
の何れかを実行すれば、ファイルサイズ0
(中身が空)のファイルが作成されます。
やはり一旦閉じた後、モード "w" で
再度開きなおすのがセオリーでしょう。
>freopen(filename, "w", oldfp);
>---
>の何れかを実行すれば、ファイルサイズ0
>(中身が空)のファイルが作成されます。
freopenは使えるんですね。
>やはり一旦閉じた後、モード "w" で
>再度開きなおすのがセオリーでしょう。
やはりそうですか。ありがとうございました。
No.6
- 回答日時:
すみません、スペース(タブ?)が詰まってしまったようです。
>intunlink(const char *pathname);
int unlink(const char *pathname);
の間違いです。申し訳有りません。
No.5
- 回答日時:
MS-Cなら、_chsizeというのもあるようです。
ファイルサイズを変更する関数ですが、試していないので0バイトにすることが可能かどうかはわかりません。
> int _chsize(int handle, long size);
ただし、ファイルハンドルが必要なので、
> int _fileno( FILE *stream );
でファイルハンドルを取得してください。
他のC処理系はどうかわかりません。
No.2
- 回答日時:
UNIX なら ftruncate という、オープンされているファイルのサイ
ズを変更する(縮めるか0で埋めて拡大する)システムコールがあ
ります。Windows でもあるかもしれません。
ただし、ファイルを指定するには、FILE * のファイルポインタじゃ
なくて、int のファイルディスクリプタを指定しますので、
fprintf で出力している場合は fflush して、吐き出したことを保
証してから、fileno でファイルディスクリプタを調べて、
ftruncate してから閉じてください。
No.1
- 回答日時:
単に削除するには以下の関数があります。
#include <stdio.h>
int remove(const char *filename);
削除できたときは0を返す、出来なかったときは0以外を返す。
この回答への補足
早速のご回答ありがとうございます。
removeというのはファイルを削除する関数でしょうか。
この関数を使う前には、ファイルを閉じておかなければいけないんでしょうか。
本当は、
ファイル自体は残っていて、中身だけ空になってなおかつ閉じてくれるのがあるといいんですけど。
removeについて:
http://www.bohyoh.com/CandCPP/C/Library/remove.h …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【C言語】テキストファイル内のデータを一行削除
C言語・C++・C#
-
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
-
4
関数から配列を返すには?
C言語・C++・C#
-
5
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
6
複数ファイルの同時読み込みの方法と脱初心者向け参考書
C言語・C++・C#
-
7
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
8
Winsockで接続待ちタイムアウトを設定する方法
C言語・C++・C#
-
9
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
10
C言語での引数の省略方法
C言語・C++・C#
-
11
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
12
define で 配列
C言語・C++・C#
-
13
同じ名前のファイルを作った場合に上書きしてしまうのですが、どうすれば上書きしないで保存できるのでしょうか?
C言語・C++・C#
-
14
C言語のポインターに関する警告
C言語・C++・C#
-
15
プログラムでの数字につく”f”の意味
C言語・C++・C#
-
16
C言語のfopenについて教えてください。
C言語・C++・C#
-
17
C言語初心者の質問失礼します。
C言語・C++・C#
-
18
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
19
c言語 2つのファイルを行ごとに読み込むプログラミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス 壊れた? 「ファイ...
-
コマンドプロンプトで作成日時...
-
#include <Windows.h>というヘ...
-
binファイルを解凍したいの...
-
リンクの張り付けかたを教えて...
-
C言語---ファイルに出力したデ...
-
公文書のxmlファイルの開き方が...
-
Latexで図番号だけを「図1.1」...
-
jarファイル
-
C#でログファイルにファイルパ...
-
exeファイルの中身を見る方法は...
-
ストレージにある全てのファイ...
-
監視ツールを入れさせられまし...
-
HTMLからのBATファイル実行
-
HEWのtoolchainの設定の確認方法。
-
warファイルをEclipseでプロジ...
-
Seasar2のdiconファイルの読み方
-
JSPが表示されない
-
.NETアプリを作ったときの .man...
-
ADODB.Streamで開いたファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
コマンドプロンプトで作成日時...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
リンクの張り付けかたを教えて...
-
.NETアプリを作ったときの .man...
-
jarファイル
-
コマンドプロンプトで、指定し...
-
「営業秘密の漏洩」について
-
自分で作成した重要ファイルを...
-
warファイルをEclipseでプロジ...
-
公文書のxmlファイルの開き方が...
-
ストレージにある全てのファイ...
-
C言語---ファイルに出力したデ...
-
HTMLからのBATファイル実行
-
ファイルが開かれているかどう...
-
監視ツールを入れさせられまし...
-
「ブルーファイル」と「グリー...
-
バッチ処理で追記コピーしたい
おすすめ情報