• ベストアンサー

ファイルの入出力

ファイルを入出力モードでopenしたいのですが、それはやはりできませんか? アペンドモードでopenするとして、ファイルの最後から2レコード前までファイルポインタをもっていき、そこから追加書込みすることはできるのでしょうか? できるのであれば、コーディング例を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> ファイルを入出力モードでopenしたいのですが、それはやはりできませんか? どうして「やはり」なんですか? マニュアルに、そのまま書いてあるのに。 読み書きをするには、fopen のモードに "+" をつけます。 fopen(ファイル名, "a+"); あと、C には「レコード」という考え方はありません。あくまでも「バイト」です。 > できるのであれば、コーディング例を教えてください。 こんな感じ。 #include <stdio.h> int main() {   FILE *in = fopen(ファイル名, "r+");   fseek(in, -2L * 1レコードのサイズ, SEEK_END);   fwrite(データ領域, 1レコードのサイズ, 1, in); /* 適当にデータを書いてね */   fclose(in);   return 0; } # 何故、fopen() のモードが a+ じゃないか、って? # 試してみれば分かります

arisa5
質問者

お礼

私の見たマニュアルには、入出力モードが書いてありませんでした。 教えていただき、ありがとうございます。 早速、試してみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.3

質問文が"open"なのでopen()を使うと言う前提で。 openであればO_RDWRでオープンすれば「読み書きモード」となります。 アペンドモード(O_APPEND)はファイルポインタをファイル末尾に移動するだけなので後でlseek()することが前提ならアペンドモードを意識する必要はありません。 ファイルポインタの移動はlseek()。

arisa5
質問者

お礼

教えていただき、ありがとうございました。 参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

C言語でできるファイル入出力関係のサンプルです。 アペンドモードは追加のみだと思いますが・・・。 C言語というのは、低級言語と呼ばれ、必要な関数は、ある程度は用意されて はいるものの自分で作らないといけない場合が多いです。

参考URL:
http://x68000.startshop.co.jp/~68user/net/c-open.html
arisa5
質問者

お礼

回答をいただき、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • UTL_FILEにて既存のExcelに追加書き込みできますか?

    いつもお世話になっております。 他にも質問をしており申し訳ないですが、どうしても困っておりまして新たに質問させていただきます。 UTL_FILEパッケージにて、予め用意しておいた雛形のExcelファイルに対して、入出力モード='A'にて追加書き込みしたいのですが、「PL/SQLプロシージャは正常に完了しました」は表示されますが、実際のファイルには全く追加書き込みされません。 入出力モード='W'にて新たなファイルを作成し、そのファイルに一切触れないまま、入出力モード='A'で書き込みを行うと、最終行に確かに追加されております。ただ、その新たなファイルをオープンして何か加工するとそれだけで追加書き込みができなくなるようです。 そもそも既存のExcelに追加書き込みできるものなのでしょうか? どなたかご教授いただけませんでしょうか? 宜しくお願い致します。

  • ファイルの入出力が出来ません。

    perlの初心者です。 cgiを作ろうとしています。 標準出力には出力できても、ファイルの入出力が出来ません。 #!/usr/bin/perl open(OUT,">>test"); print OUT "test data"; close (OUT); と実行しても、エラーもでないのですが、ファイルも作られず、書き込みもされません。 しかし、コマンド名'test'としてセーブして、プロンプトから'perl test'とするとファイルに書き込みされるようです。 perlの設定の問題なのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • c/c++でのファイルの上書き保存について

     現在cを勉強中なのですがファイル入出力に関して質問があります。 たとえばint型の2つの要素を持つ構造体 typedef struct{ int first,second; }ex; のex型の変数 datをFILE *fpにfwriteで書き込むとすると fwrite(&dat,sizeof(ex),1,fp); と書きますよね。書き込まれる位置はr+モードならファイルポインタの位置から上書き、aなら末尾から追加です。今データは残しておきたいのでwモードは考えていません。  ここで質問なのですが末尾ではなく任意のファイルポインタの位置から追加で書き込んだり、ある特定のレコードを削除したりと言う操作は不可能なのでしょうか?  今のところ、削除については削除したマークをつける方法、レコードの追加についてはテンポラリファイルに追加する前までのレコードをコピーして追加したいレコードを書いてそのあとに残りのデータをコピーした後テンポラリファイルの名前を変える、ということが考えられるのですがもっと効率のよい方法はないのでしょうか? よろしくお願いします。cで無理ならc++でもかまいません。

  • ファイルの入出力について・・・

    C言語初心者です。。。 ファイルの入出力についてなのですが、***.txtというファイルを読み込み、内容をコピーし、***.bakというファイルを作成するプログラムをつくっています。 単純なファイルの読み込みや書き込み程度なら理解しましたが、内容をコピーし、拡張子を.bakに変えるというところが全く思いつきません。 教えてもらえないでしょうか??よろしくお願いします。

  • fortranのファイル入出力のopen文

    fortranのファイル入出力のopen文で、パスを指定せずファイル名を指定すると、EXEのあるフォルダにそのファイルが作られますが、次の例は、サブフォルダOUTをあらかじめEXEのあるフォルダに作っておき、そこに、計算結果を判断してファイル名をvmax,timeと指定して出力した例です。この場合、サブフォルダOUTも、計算結果に応じてプログラム内で名前を指定したいのですが、できるのでしょうか。 例: open (10,file='./out/vmax.csv') open (11,file='./out/time.csv')

  • PHPのファイルオープンモードについて

    掲記事1件1件のログファイルをCSV形式で連ねて書いた、 示板記事保存用のPHPでファイルをオープンして、読み書きするときに、スタックのような、 LIFO(Last in First out)のような、ファイルオープンモードってありますか? ちなみに、'a+' だとファイルポイントをファイルの末尾に置く為に、読み出して、画面に書くと、 新しい記事ほど、ラストに表示されてしまいます。’w+’だと、ファイルポインタを先頭にもってくるが、 ファイルサイズを0にしてしまい、用をなしません。 新記事を上のほうに表示する(つまり、ファイルポインタを先頭にもってきて、かつ、前のレコードはしっかりそのあとに移動させる)には、どういうファイルオープンモードがあるでしょうか。

    • ベストアンサー
    • PHP
  • 乱数とファイルの入出力の質問です。

    課題で「100個の乱数を発生させファイルに保存し、そのファイルを読み込み、昇順に並べ替えするプログラムを作れ」という課題がありました。 乱数を発生させるのと、昇順に並び替える方法はわかるのですが、二つをうまく組み合わせる方法がわかりません。 ポインタを使ってファイルの入出力をするプログラムを教えてくださる方がいたら連絡ください。 出来れば模範のプログラムを掲示していただけるとうれしいです。

  • 入出力共用が出来ないんです

    カウンターを作ろうとしてるんですけど、入出力共用が出来ないんです。 その部分は open INOUT, "+>$txt";       #$txtはテキストファイルへのアドレス $count = <INOUT>; $count++; print INOUT $count; close INOUT; ってやっています。ここだけコマンドプロンプトで試しているんですが、上手く動きません。"+>$txt"を"+<$txt"としたり、">+$txt"にしたり、最後には、">+<$txt"といろいろ試したんですがダメでした。 ちなみに open IN, "<$txt"; $count = <IN>; close IN; $count++; open OUT, ">$txt"; print OUT $txt; close OUT; ってやると動きます。別にこれでもいいんですが、本には共用出来ると書いてあるのに出来ない、なんかすっきりしません。 入出力共用って出来ないんでしょうか?

    • ベストアンサー
    • CGI
  • Mathematicaでファイルの入出力に変数を使うには

    Mathematicaでファイルの入出力に変数を使うにはどのようにしたらいいのでしょうか? 検索の結果http://staff.aist.go.jp/w.mizutani/usw-200406.htmlに First[ReadList[file_name, Record, RecordSeparators -> {}]] とあったのですが,具体的な使用方法をお教えできればと思います.

  • C/C++ ファイル入出力操作 (長文です。)

    C/C++歴4ヶ月の初心者プログラマーです。現在、 C/C++でのファイル入出力で大変困っております。 その内容というのはファイルをオープンし指定した テキストファイルに書き込む時に制限をかけたいのです。 例えば、 ファイルに書き込む内容が50行を超えた場合 1番始めに書き込まれた1行目の内容を削除して、 2行目~50行目のデータを1行繰上げて、最新のデータを 50行目に書き込んでいく処理をしたいのですが僕一人では 全くわからず先に進めない状態です。どなたかわかる方 おられますか?よろしければご伝授してください。 途中までのソースを載せておきますので宜しくお願いいたします。 Cで書いていますがC++でも方法があればお願いいたします。 /****************************** サンプルソース ******************************/ #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp //ファイルポインタの宣言 char str[] = "テスト書き込み"; if((fp=("test.txt","w"))==NULL) //ファイルオープン { exit(1); //ファイルオープンエラー時 } //ここの処理がわかりません。50行まできたら1行目を削除し //2行目~50行目を1行繰上げ、最新データを50行目に書き込み fprintf(fp,"%s\n", str); fclose(); }