No.1ベストアンサー
- 回答日時:
Aの後ろにBの内容を追加するだけで可能。
ただし、途中で異常終了した場合、Aの内容が破壊される可能性があるので、作業ファイルを使うこともありますが、あくまでも方法論です。
別にファイルを結合するのが目的であれば、バイナリモードで開いて読めるだけ読むのでもかまいません。
>また、fopenで追加書き出しのオプションaの場合も、結局は
>上記と同じことをやっているのでしょうか?
ということで、違います。
そんなことをしていたら、巨大なファイルをオープンしたら同じサイズのディスク容量が必要になってディスク容量不足に陥る可能性があります。
回答ありがとう御座います。
>Aの後ろにBの内容を追加するだけで可能。
そうなのですか。
じゃあ、オプションaを使わない場合は、どんなコードで実現するのか、教えていただけたらうれしいのですが。
No.2
- 回答日時:
>じゃあ、オプションaを使わない場合は、どんなコードで実現するのか、教えていただけたらうれしいのですが。
それって、
>ファイルAを1行ずつ読み出してファイルCに書き込み、
>続けてファイルBを1行ずつ読み出して、またファイルCに書き込む。
>
>その後ファイルAを消してファイルCをファイルAとし置き換える。
これのことでは?
これだとrとwしか使わないような。
回答ありがとう御座います。
>そんなことをしていたら、巨大なファイルをオープンしたら同じサイズのディスク容量が必要になってディスク容量不足に陥る可能性があります。
このアドバイスに従い、
ファイルCを使わない方法を知りたいのですが。
No.4
- 回答日時:
fopenのモードaが内部でやっているのは、もっと低レベル(機械言語に近い)なアクセスだと思います。
それに少し近づくのであればopenやlseekなどを使ってみてはいかがでしょうか?
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.6
- 回答日時:
fopenのモード"a"を使わずに追加書き出しを実現ですか…。
モード"a"は読み込み&追加書き込みであることと、既存のファイルを壊さない上に、ファイルが存在しない場合には作成するという機能を持ってますから、似た様な機能を持つ"r+"と"w+"を適切に選択しないとファイルを開けませんね。
まずは、fopenで開く前に_stat関数でファイルの有無を調べておき、存在するなら"r+"で、存在しないなら"w+"でfopenしましょう。
それから、ファイルを開いたらファイルの終端にファイルポインタを移動して、終端に追加書き込みできる様にする必要がありますね。
fseek(fp,0,SEEK_END);
ってな感じの処理が必要でしょう。
コード書くの面倒なので、ざっとおおまかな流れだけ書きましたけど、分かりますか?
回答ありがとうございます。
まったく問題無く理解できますよ。
あとは、この内容のコード書くのがどれだけ大変なのかがイメージできません。(ファイル入出力のオーソドックスなことしかやったことがないため)
便利な関数があるのに無理に自作する気はありませんが、勉強の為にそれほど難しくないのであれば教えていただきたいと思い質問しました。
もちろんコードの提示は不要です。
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.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+のことを忘れて、途中回答を間違えてたってのもありますが・・・
いつも回答ありがとう御座います。
#どもども、とにかく今回のことは忘れてください。
こんなに貴殿と会話がかみ合わなかったのは初めてです。
いつもは、他の人とはかみ合わなくても、貴殿だけは豊富な知識に裏づけされているからだと思いますが、”ははぁ~んあれのことで悩んでるんだな。”と察して頂いて、ずばり的確な回答を頂いてたのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- フリーソフト mmfファイルからmp3に変換できる方法を教えてください(XMediaRecode以外で) 2 2022/03/22 22:25
- PDF PDFに精通した方に質問。JPEGファイル群を一つのPDFファイルにするときの容量変化について 6 2023/07/23 19:06
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
複数のテキストファイルを1つにまとめる
C言語・C++・C#
-
ファイルの途中に文字列を挿入
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
-
4
#defineの定数を文字列として読み込む
C言語・C++・C#
-
5
数字の位ごとの値を表示するプログラム
C言語・C++・C#
-
6
C言語で全角文字を扱いたいのですが、
C言語・C++・C#
-
7
テキストファイルの内容を連結する簡易な方法
C言語・C++・C#
-
8
cout関数を使っているのですが,画面に出力されません。
C言語・C++・C#
-
9
fopne で失敗する原因
C言語・C++・C#
-
10
LPSTR型の初期化について
C言語・C++・C#
-
11
c言語 2つのファイルを行ごとに読み込むプログラミング
C言語・C++・C#
-
12
_tcscpy_s(wcscpy_s)の第二引数って
C言語・C++・C#
-
13
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
14
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
SGファイルって何ですか?
-
CSVファイルへの保存の際、デー...
-
「VBScript」ADODB.Streamにお...
-
マウスポインタの変更
-
分割コンパイルの#defineについて
-
バッチで118項目のCSVを処理し...
-
[VBScript]ファイルの入出力を...
-
VB6でのファイル作成方法
-
VBに、Cのincludeのようなもの...
-
大きいサイズのテキストファイ...
-
fopenできる上限の変更
-
同じ名前のファイルを作った場...
-
■ 移植性のないポインタ変換に...
-
プログラムで文字をBMPファイル...
-
C言語のfopenについて教えてく...
-
CSVファイル
-
Javascript で INI の読み書き
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
ファイルを記録してあるセクタ...
-
テキストファイルの最終行を削...
-
SGファイルって何ですか?
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
グローバル変数のよくない使い...
-
ファイルの結合
-
大きいサイズのテキストファイ...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
ハッシュの計算時間について
-
C言語のfopenについて教えてく...
-
Javascript で INI の読み書き
-
Excelマクロでの再読込み方法
おすすめ情報