
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#
-
【C言語】テキストファイル内のデータを一行削除
C言語・C++・C#
-
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
-
4
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
5
関数から配列を返すには?
C言語・C++・C#
-
6
複数ファイルの同時読み込みの方法と脱初心者向け参考書
C言語・C++・C#
-
7
C言語のfopenについて教えてください。
C言語・C++・C#
-
8
C言語での引数の省略方法
C言語・C++・C#
-
9
Winsockで接続待ちタイムアウトを設定する方法
C言語・C++・C#
-
10
同じ名前のファイルを作った場合に上書きしてしまうのですが、どうすれば上書きしないで保存できるのでしょうか?
C言語・C++・C#
-
11
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
12
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
13
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
14
プログラムでの数字につく”f”の意味
C言語・C++・C#
-
15
c言語 2つのファイルを行ごとに読み込むプログラミング
C言語・C++・C#
-
16
define で 配列
C言語・C++・C#
-
17
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
18
C言語のポインターに関する警告
C言語・C++・C#
-
19
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
20
C言語初心者の質問失礼します。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
binファイルを解凍したいの...
-
コマンドプロンプトで作成日時...
-
#include <Windows.h>というヘ...
-
リンクの張り付けかたを教えて...
-
warファイルをEclipseでプロジ...
-
コマンドプロンプトで、指定し...
-
C言語---ファイルに出力したデ...
-
アクセス 壊れた? 「ファイ...
-
.NETアプリを作ったときの .man...
-
Latexで図番号だけを「図1.1」...
-
監視ツールを入れさせられまし...
-
WININET.DLL FtpCommand(TYPE)...
-
CSSファイルの日本語コメントが...
-
exeファイルの作り方
-
ストレージにある全てのファイ...
-
ハイパーリンクされたJPGファイ...
-
exeファイルが作れない(windows10)
-
GetOpenFilename メソッドについて
-
バッチ処理で追記コピーしたい
-
VBAでのicsファイル変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
コマンドプロンプトで作成日時...
-
.NETアプリを作ったときの .man...
-
リンクの張り付けかたを教えて...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
jarファイル
-
「ブルーファイル」と「グリー...
-
ファイルが開かれているかどう...
-
バッチ処理で追記コピーしたい
-
VBAのバイナリ出力について
-
公文書のxmlファイルの開き方が...
-
コマンドプロンプトで、指定し...
-
監視ツールを入れさせられまし...
-
自分で作成した重要ファイルを...
-
HTMLからのBATファイル実行
-
VBSが起動しない
-
他のMDBのマクロを実行する方法
-
Batファイルをバイナリ形式にす...
おすすめ情報