🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #610

Re: [Q] ファイルの特定の位置を変更

#610
From: Yasuhiko Gotoh
Date: Wed, 18 Mar 1998 00:00
96 lines
3712 bytes
後藤です。
自己フォローです。

fj.lang.c の <6enn9u$phh@voyager.kso.njk.co.jp> の
記事において 1998年03月18日(水) 14時49分50秒頃、
gotohさんは書きました。

>>  後藤ともうします。
>>  改行位置を変更させていただいています。
>>  
>>  fj.lang.c の <3506A0D3.3AA59CDA@geocities.co.jp> の
>>  記事において 1998年03月11日(水) 23時33分55秒頃、
>>  sierraさんは書きました。
>>  
>>  sierraさん>>  瑞原と申します。よろしくお願いします。
>>  sierraさん>>  
>>  sierraさん>>  既にあるファイルを開き、特定の位置を変更する
>>  sierraさん>>  プログラムを考えています。
>>  sierraさん>>  
>>  sierraさん>>  fopenで開きfseekで特定の位置に移動しfwriteで
>>  sierraさん>>  書き込んでfcloseで終了した
>>  sierraさん>>  のですが、fwriteで書き込んだ位置以降が消えてなくなっています。
>>  sierraさん>>  
>>  sierraさん>>  ファイルの特定の位置を変更するにはどうすればいいものでしょうか…
>>  sierraさん>>  よろしくお願いします。
>>  
>>  fcloseするときに再度fseekでファイルの一番後ろにファイルポインタを
>>  持っていくとよいのではないかと思います。
>>  #たしかfcloseが現在のファイルポインタで切ってしまうのでは
>>  オープンモード等忘れましたがrb+なども試してみてください。
>>  
>>  もし間違いでしたら、本文は無視してください。

少し気になったのでサンプルプログラムを作ってみました。
実行確認
1)TurboC Ver2.0 (MSDOS)
2)Microsoft VC++ Ver5.0(PC9801 Win95)
3)SunOS 5.4 / gcc version 2.6.0

-------- data.1の中身 ------------
0123456789
0123456789
0123456789
0123456789
0123456789
0123456789
------- ここまで ----------------

------- sample program ---------
#include	<stdio.h>

main()
{
FILE	*fp;
char	buf[20];

fp=fopen("data.1","r+");
fseek(fp, 12, 0);		/* Sunでは 12, 1 は 11, 1 */
fread(buf, 10, 1, fp);
buf[11]=0;
printf("buf = %s", buf);
strcpy(buf, "abcdefghij");
fseek(fp, 12, 0);
fwrite(buf, 10, 1, fp);		/* Sunでは 12, 1 は 11, 1 */
/*
fseek( fp, 0, 2);
*/
fclose( fp );
}
------ ここまで -------------

上記をコンパイル実行しましたが、
最後のfseekの有無に関わらず、data1の中身は

-------- data.1の中身 ------------
0123456789
abcdefghij
0123456789
0123456789
0123456789
0123456789
------- ここまで ----------------

と変更され、書き込んだ後がなくなるという現象は
確認できませんでした。
うーん、どこがどうなっているのでしょうかね。
サンプルソフトが、ご参考になれば幸いです。

では
-----------------------------------------------------------------
    後藤安彦@関西事業所 OP制御システム 第8システム部
      E-Mail : gotoh@kso.njk.co.jp
      Tel_No : 06-350-3605
      Fax_No : 06-350-3645 , 3646
-----------------------------------------------------------------
Technical Details
Message-ID: <6enu63$sq7@voyager.kso.njk.co.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <3506A0D3.3AA59CDA@geocities.co.jp> <6enn9u$phh@voyager.kso.njk.co.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 106434,8a84d598efbbed25
X-Google-Attributes: gid106434,public
From: gotoh@kso.njk.co.jp (Yasuhiko Gotoh)
Subject: Re: [Q] ファイルの特定の位置を変更
Date: 1998/03/18
Message-ID: <6enu63$sq7@voyager.kso.njk.co.jp>
X-Deja-AN: 335173359
References: <3506A0D3.3AA59CDA@geocities.co.jp> <6enn9u$phh@voyager.kso.njk.co.jp>
Mime-Version: 1.0
Distribution: fj
Content-Type: text/plain; charset=ISO-2022-JP
Organization: NJK Corp.,Osaka,Japan
Newsgroups: fj.lang.c