ファイルへの文字列の追加 – プログラミング – Home

ファイルへの文字列の追加
 
通知
すべてクリア

[解決済] ファイルへの文字列の追加


SPA
 SPA
(@SPA)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

ファイルポインタを使用したファイル操作について質問があります。
まず、下記のように書き込みファイルを開いているとします。
FILE *fp;
fp = fopen(Test.txt,wt);

そしてこのファイルへ文字列を書き込みます。
fputc(Test1\n,fp);
fputc(Test2\n,fp);
fputc(Test3\n,fp);
fputc(Test4\n,fp);
その後、fseek関数によりファイルポインタを先頭に戻し、
追加をしようとして
fseek(fp, 0, SEEK_SET);
fputc(Test5\n,fp);
fputc(Test6\n,fp);
fputc(Test7\n,fp);
fputc(Test8\n,fp);
のように書いたら、Test1~Test4にTest5~Test8が
上書きされてしまいます。
どのようにしたらファイルの先頭に追加する事が出来るのでしょうか?
fopenの第2引数を色々と代えてやってみたのですが、
上手く行きません…。
第2引数をatに変えてみたら末尾に追加されるだけでした。
開発環境はVC++6.0にWinXPです。
宜しくお願いします。


引用未解決
トピックタグ
SPA
 SPA
(@SPA)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

>fputc(Test1\n,fp);

書き間違えました。
正しくはfputsです。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

> ファイルポインタを使用したファイル操作について質問があります。
> まず、下記のように書き込みファイルを開いているとします。
> FILE *fp;
> fp = fopen(Test.txt,wt);

wtってなんでしょうか??
もしかしてw+の間違いでは??

> その後、fseek関数によりファイルポインタを先頭に戻し、
> 追加をしようとして
> fseek(fp, 0, SEEK_SET);
> fputs(Test5\n,fp);
> fputs(Test6\n,fp);
> fputs(Test7\n,fp);
> fputs(Test8\n,fp);
> のように書いたら、Test1~Test4にTest5~Test8が
> 上書きされてしまいます。
> どのようにしたらファイルの先頭に追加する事が出来るのでしょうか?

ファイル先頭に「追記」はできません。
新しくファイルを作って、先頭に追加したい分を先に書き込み
その後で元ファイルのデータをコピーする方法をがあります。
(さらにその後元ファイルを削除してから書き込んだファイルをリネームする)

あるいは、元ファイルの内容を全てメモリに読み込み、
(クローズしてから)新規作成で同名ファイルをwモードでオープンし、
先頭に追加したい分を書き出してからメモリに読み込んだ内容を書き出して下さい。


返信引用
SPA
 SPA
(@SPA)
ゲスト
結合: 21年前
投稿: 7
Topic starter  

瀬戸っぷさん、レス有難う御座います。

>wtってなんでしょうか??
>もしかしてw+の間違いでは??

あれっ?テキストモードで開く時はこんな風に
書くのでは無いのですか?
ちょっとこちらもあいまいな所があるもので…。

>ファイル先頭に「追記」はできません。
>新しくファイルを作って、先頭に追加したい分を先に書き込み
>その後で元ファイルのデータをコピーする方法をがあります。
>(さらにその後元ファイルを削除してから書き込んだファイルをリネームする)
>あるいは、元ファイルの内容を全てメモリに読み込み、
>(クローズしてから)新規作成で同名ファイルをwモードでオープンし、
>先頭に追加したい分を書き出してからメモリに読み込んだ内容を書き出して下さい。

そうですか…やっぱり無理なんですね。
別々のファイルに明記して、その後に全てを合わせるしかないですね。

レス有難う御座います。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

> >wtってなんでしょうか??
> >もしかしてw+の間違いでは??
> あれっ?テキストモードで開く時はこんな風に
> 書くのでは無いのですか?

VC++ 6.0とのことなので,これでもOKです。
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_fopen.2c_.
_wfopen.asp

ただし,mode文字列中のフラグで,t/c/n/S/R/T/Nは非標準(Microsoft固有)なので,
必要でないなら使わない方がよいかもしれないです。
#例の直前に小さく書いてある。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました