No.1ベストアンサー
- 回答日時:
Aの後ろにBの内容を追加するだけで可能。
ただし、途中で異常終了した場合、Aの内容が破壊される可能性があるので、作業ファイルを使うこともありますが、あくまでも方法論です。
別にファイルを結合するのが目的であれば、バイナリモードで開いて読めるだけ読むのでもかまいません。
>また、fopenで追加書き出しのオプションaの場合も、結局は
>上記と同じことをやっているのでしょうか?
ということで、違います。
そんなことをしていたら、巨大なファイルをオープンしたら同じサイズのディスク容量が必要になってディスク容量不足に陥る可能性があります。
回答ありがとう御座います。
>Aの後ろにBの内容を追加するだけで可能。
そうなのですか。
じゃあ、オプションaを使わない場合は、どんなコードで実現するのか、教えていただけたらうれしいのですが。
No.8
- 回答日時:
>他サイトで教えていただいたコードです。
>こういう回答を期待してました。
はぁ、そうだったんですか・・・
流れからだと、
>また、fopenで追加書き出しのオプションaの場合も、結局は
>上記と同じことをやっているのでしょうか?
「aを使った場合、一時ファイルはいらないよ」という回答をしました。
>じゃあ、オプションaを使わない場合は、どんなコードで実現するのか、教えていただけたらうれしいのですが。
#あれ?それって一時ファイルを使う方法のことじゃないの?という思い。
>ファイルCを使わない方法を知りたいのですが。
「aを使えばできるよ」という回答をしました。
#なんで元に戻ってんだ?という思い。
まず、ここでずれてきちゃってますね。
#1と#2のお礼の内容を別々と考えずに、合わせて、
「モードaを使わずに、一時ファイルも使わない方法が知りたい」と思えばよかったのですが。
>別の言い方をすると、モード"a"と同じ機能のコードを知りたいということです。
ここですね。大きくずれたのは。
「モード"a"と同じ機能のコード」と書かれると、#4の方のような回答が出てきてしまいます。fopenを自分で作るような感じの回答です。
>4.じゃあ、勉強の為に知りたいのですが、fopenのモードaの関数はC言語でどのように記述されているのでしょうか?
いくらなんでも、ここからは#7のお礼の内容は出てきません。
これはあくまでも、
「fopenのモードaを使わずに、一時ファイルも使わないでファイルの結合処理を行うソース」です。
fopenのC言語での記述ではないです。
ということで、私のほうも勘違いがありましたが、小出しに用件を書かれると、それがandなのか、ぜんぜん別件なのか判断できないこともあるので必要な情報ははしょらないで欠いてくださいね。
#r+のことを忘れて、途中回答を間違えてたってのもありますが・・・
いつも回答ありがとう御座います。
#どもども、とにかく今回のことは忘れてください。
こんなに貴殿と会話がかみ合わなかったのは初めてです。
いつもは、他の人とはかみ合わなくても、貴殿だけは豊富な知識に裏づけされているからだと思いますが、”ははぁ~んあれのことで悩んでるんだな。”と察して頂いて、ずばり的確な回答を頂いてたのですが。
No.7
- 回答日時:
>4.じゃあ、勉強の為に知りたいのですが、fopenのモードaの関数はC言語でどのように記述されているのでしょうか?
ということでしたらある程度意味はわかりますが。
では、処理系は?Windowsですか?Linuxですか?コンパイラは何をお使いで?
という話になります。
多くの開発環境は標準関数のソースが付属していますので基本的にはそちらを見てくださいというのが回答です。
それでは、そっけないので。
この質問ですと、どこまでの深さで?ということにもなります。
Cの標準関数というのは、基本的にプラットフォームの違いを埋めてくれているのでWindowsでもUnixでも同じように使えます。
ファイルIOのように、もろに処理系に依存している処理ですと、必ずOSまたはハード等を直接たたく処理が存在します。これがWindowsですとWindowsAPIにあたります。
ただし、fopenは高水準のファイルIOなので、低水準の標準C関数の組み合わせで実現可能です。
#実際のfopenのソースが標準関数のみでかかれているかは別問題です。
なので、情報としてはまだ不足しています。
”別のC標準関数を使って”or”処理系依存の処理も使用して”ということが。
回答ありがとうございます。
他サイトで教えていただいたコードです。
こういう回答を期待してました。
#include <stdio.h>
int main()
{
FILE* pf_a;
FILE* pf_b;
int c;
pf_a = fopen( "a.txt", "r+" );
fseek( pf_a, 0, SEEK_END );
pf_b = fopen( "b.txt", "r" );
for( c = getc( pf_b ); c != EOF; c = getc( pf_b ) )
putc( c, pf_a );
fclose( pf_b );
fclose( pf_a );
return 0;
}
No.6
- 回答日時:
fopenのモード"a"を使わずに追加書き出しを実現ですか…。
モード"a"は読み込み&追加書き込みであることと、既存のファイルを壊さない上に、ファイルが存在しない場合には作成するという機能を持ってますから、似た様な機能を持つ"r+"と"w+"を適切に選択しないとファイルを開けませんね。
まずは、fopenで開く前に_stat関数でファイルの有無を調べておき、存在するなら"r+"で、存在しないなら"w+"でfopenしましょう。
それから、ファイルを開いたらファイルの終端にファイルポインタを移動して、終端に追加書き込みできる様にする必要がありますね。
fseek(fp,0,SEEK_END);
ってな感じの処理が必要でしょう。
コード書くの面倒なので、ざっとおおまかな流れだけ書きましたけど、分かりますか?
回答ありがとうございます。
まったく問題無く理解できますよ。
あとは、この内容のコード書くのがどれだけ大変なのかがイメージできません。(ファイル入出力のオーソドックスなことしかやったことがないため)
便利な関数があるのに無理に自作する気はありませんが、勉強の為にそれほど難しくないのであれば教えていただきたいと思い質問しました。
もちろんコードの提示は不要です。
No.5
- 回答日時:
>>このアドバイスに従い、
>>ファイルCを使わない方法を知りたいのですが。
>
>モード"a"を使わずに実現する方法がしりたいのですが。。。
>
>別の言い方をすると、モード"a"と同じ機能のコードを知りたいということです。
うーん、#2のお礼の内容からは、どうやっても読み取れないんですが・・・
一時ファイルを使わずに、fopenをa以外で使うのは無理でしょう。どう考えたって。aとrとwの動作を考えれば。
#まぁ、a+ってのがあるけど、aと同じだし。
>一時ファイルを使わずに、fopenをa以外で使うのは無理でしょう。どう考えたって。aとrとwの動作を考えれば。
う~ん、今回の質問だけはどうして意図が通じないのかこちらも困惑しています。
これまでの話は無かったことにして、もう一度質問します。
1.fopenのモードaは一時ファイルを使わない。
2.fopenのモードaの動作はC言語で書かれている。
(この前提が間違っていたら、この質問は成立しません)
3.巨大ファイルの存在を考えると、一時ファイルは使いたくない。
4.じゃあ、勉強の為に知りたいのですが、fopenのモードaの関数はC言語でどのように記述されているのでしょうか?
ということなのですが。。。
No.2
- 回答日時:
>じゃあ、オプションaを使わない場合は、どんなコードで実現するのか、教えていただけたらうれしいのですが。
それって、
>ファイルAを1行ずつ読み出してファイルCに書き込み、
>続けてファイルBを1行ずつ読み出して、またファイルCに書き込む。
>
>その後ファイルAを消してファイルCをファイルAとし置き換える。
これのことでは?
これだとrとwしか使わないような。
回答ありがとう御座います。
>そんなことをしていたら、巨大なファイルをオープンしたら同じサイズのディスク容量が必要になってディスク容量不足に陥る可能性があります。
このアドバイスに従い、
ファイルCを使わない方法を知りたいのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?賛成だったら「賛」、否定だったら「否」を文頭においてあなたの意見を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
複数のテキストファイルを1つにまとめる
C言語・C++・C#
-
テキストファイルの内容を連結する簡易な方法
C言語・C++・C#
-
C言語で全角文字を扱いたいのですが、
C言語・C++・C#
-
-
4
freadでデータがない場合の読込値は?
C言語・C++・C#
-
5
CString から LPCTSTRの型に変換
C言語・C++・C#
-
6
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
7
C言語での引数の省略方法
C言語・C++・C#
-
8
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
9
ファイルの途中に文字列を挿入
C言語・C++・C#
-
10
WaitForSingleObjectの使い方について
C言語・C++・C#
-
11
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
12
char型全角数字から、int型半角数字への変換方法
C言語・C++・C#
-
13
c++std::string型をTCHARに変換したい!
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
Javascript で INI の読み書き
-
csvファイルを開かずに文字を検...
-
ハッシュの計算時間について
-
Visual Stadio2008でjarファイ...
-
RPGでファイル名(もしくはレコ...
-
BMP → AVI 作成について
-
CSVファイルへの保存の際、デー...
-
アプリケーション終了時例外エ...
-
Excelマクロでの再読込み方法
-
XMLファイルの表示について
-
ASP .NETでファイル選択ダイア...
-
UTL_FILEにて既存のExcelに追加...
-
Access2010の最適化設定について
-
分割コンパイルの#defineについて
-
VBAにてEXCEL以外のファイル(テ...
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
CSVファイル読み込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
Excelマクロでの再読込み方法
-
テキストファイルの最終行を削...
-
C言語のfopenについて教えてく...
-
ASP .NETでファイル選択ダイア...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
VBに、Cのincludeのようなもの...
-
VBAにてEXCEL以外のファイル(テ...
-
アプリケーション終了時例外エ...
-
大きいサイズのテキストファイ...
-
fopenできる上限の変更
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
バッチで118項目のCSVを処理し...
-
【C#】リソースファイルの埋め...
-
マウスポインタの変更
-
XMLファイルの表示について
おすすめ情報