
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言語のfopenについて教えてください。
C言語・C++・C#
-
5
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
6
C言語のポインターに関する警告
C言語・C++・C#
-
7
関数から配列を返すには?
C言語・C++・C#
-
8
複数ファイルの同時読み込みの方法と脱初心者向け参考書
C言語・C++・C#
-
9
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
10
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
11
Winsockで接続待ちタイムアウトを設定する方法
C言語・C++・C#
-
12
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
13
C言語での引数の省略方法
C言語・C++・C#
-
14
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
15
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
16
define で 配列
C言語・C++・C#
-
17
C言語 ファイルの指定された行を表示
C言語・C++・C#
-
18
ファイルの途中に文字列を挿入
C言語・C++・C#
-
19
標準出力の上書き
C言語・C++・C#
-
20
std::stringからLPCWSTR型への変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リンクの張り付けかたを教えて...
-
.NETアプリを作ったときの .man...
-
HTMLからのBATファイル実行
-
アクセス 壊れた? 「ファイ...
-
公文書のxmlファイルの開き方が...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
aviファイルの読み込み
-
exeファイルの中身を見る方法は...
-
binファイルを解凍したいの...
-
コマンドプロンプトで作成日時...
-
「ブルーファイル」と「グリー...
-
【VBA】EXCELブックを開かずに...
-
参照するファイルをワイルドカ...
-
mdsファイルが作成されない
-
ファイルが開かれているかどう...
-
VBAのバイナリ出力について
-
Excel VBA リンク更新について ...
-
監視ツールを入れさせられまし...
-
C#でログファイルにファイルパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトで作成日時...
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
.NETアプリを作ったときの .man...
-
リンクの張り付けかたを教えて...
-
公文書のxmlファイルの開き方が...
-
#include <Windows.h>というヘ...
-
Latexで図番号だけを「図1.1」...
-
コマンドプロンプトで、指定し...
-
jarファイル
-
「ブルーファイル」と「グリー...
-
ファイルが開かれているかどう...
-
バッチ処理で追記コピーしたい
-
VBAでのicsファイル変換
-
CSSを1ページに1枚作るのって変...
-
監視ツールを入れさせられまし...
-
C#でログファイルにファイルパ...
-
exeファイルの中身を見る方法は...
-
自分で作成した重要ファイルを...
-
HTMLからのBATファイル実行
おすすめ情報