
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で質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) 特定のpremiere proのファイルが開けなくなりました。 1 2022/11/16 12:31
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Windows 10 Windows10の回復環境 2 2023/02/03 19:13
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
- CAD・DTP JWW-CADでDXF変換後の線が連動して消える 2 2023/01/13 11:09
- Excel(エクセル) エクセルのフッタやヘッダーについて 3 2023/02/04 09:45
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- その他(社会・学校・職場) 業務内容についてどう思いますか? 私は客先の仕事を下請けとして行うという仕事をしていますが、(客先の 2 2022/05/04 16:17
このQ&Aを見た人はこんなQ&Aも見ています
-
ファイル内のデータを1行削除する方法
C言語・C++・C#
-
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
【C言語】テキストファイル内のデータを一行削除
C言語・C++・C#
-
-
4
C言語のポインターに関する警告
C言語・C++・C#
-
5
C言語のfopenについて教えてください。
C言語・C++・C#
-
6
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
7
関数から配列を返すには?
C言語・C++・C#
-
8
C言語での引数の省略方法
C言語・C++・C#
-
9
複数ファイルの同時読み込みの方法と脱初心者向け参考書
C言語・C++・C#
-
10
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
11
C言語を用いたファイルの一括削除について
C言語・C++・C#
-
12
Winsockで接続待ちタイムアウトを設定する方法
C言語・C++・C#
-
13
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
14
ファイルの途中に文字列を挿入
C言語・C++・C#
-
15
C言語 ファイルの指定された行を表示
C言語・C++・C#
-
16
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
17
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
18
define で 配列
C言語・C++・C#
-
19
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
20
C言語 配列の長さの上限
C言語・C++・C#
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
-
ピンとくる人とこない人の違いは?直感を鍛える方法を心理コンサルタントに聞いた!
根拠はないがなんとなくそう感じる……。そんな「直感がした」という経験がある人は少なくないだろう。ただ直感は目には見えず、具体的な説明が難しいこともあるため、その正体は理解しにくい。「教えて!goo」にも「...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
自分で作成した重要ファイルを...
-
jarファイル
-
リンクの張り付けかたを教えて...
-
VBAでのicsファイル変換
-
EXEファイルへのハイパーリンク
-
.NETアプリを作ったときの .man...
-
「ブルーファイル」と「グリー...
-
公文書のxmlファイルの開き方が...
-
ファイル圧縮形式の変更について
-
VBAのバイナリ出力について
-
ファイルが開かれているかどう...
-
access VBAで指定のPDFを開きたい
-
ADODB.Streamで開いたファイル...
-
VBSが起動しない
-
コマンドプロンプトで作成日時...
-
大容量のファイルをseek関数で...
-
監視ツールを入れさせられまし...
-
ネットワーク上のexeファイル実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトで作成日時...
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
.NETアプリを作ったときの .man...
-
リンクの張り付けかたを教えて...
-
公文書のxmlファイルの開き方が...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
コマンドプロンプトで、指定し...
-
jarファイル
-
「ブルーファイル」と「グリー...
-
ファイルが開かれているかどう...
-
バッチ処理で追記コピーしたい
-
VBAでのicsファイル変換
-
CSSを1ページに1枚作るのって変...
-
監視ツールを入れさせられまし...
-
C#でログファイルにファイルパ...
-
exeファイルの中身を見る方法は...
-
自分で作成した重要ファイルを...
-
HTMLからのBATファイル実行
おすすめ情報