2つのバイナリ形式のデータが出力されたテキストファイル
「C:\a.txt」「C:\b.txt」の中身を結合させて、
1つのファイル「C:\c.txt」にまとめようと思っています。

ファイルパスを指定し、CFile::OpenとCFile::Readで
一つずつファイル内容を読み出し、c.txtに書き出す方法だと少し手間がかかるので、
より簡易な方法で一つのファイルにまとめたいのですが、
何か効率的で良い方法があれば、教えていただけませんでしょうか?
例えば、Linuxでいうcatコマンドのような方法があれば理想的なのですが。。
よろしくお願い致します。

開発環境:VC++2005、MFC

このQ&Aに関連する最新のQ&A

A 回答 (4件)

 こんにちは。

補足頂きました。
 駄目でしたか。ファイルパスが不完全である事が考えられます。
 起動したフォルダ内に置いてあれば、ファイル名の指定だけで出切る筈です。
 exeファイルのあるフォルダ(\\debugフォルダの中)にa.txtとb.txtを置いて試しても無理でしょうか(成功すれば合成されたc.txtが出て来る筈です)。
 
 此れで無理であれば、当方ではチョッと分からないです。
 まあ、仮に::system()が使えなくても、其処まで拘る必要は無くて、CFileで書いた方がコードは長いですが、実行速度は速いと思います。

//以下の場合a.txtに追記
CFile dst(TEXT("a.txt"), CFile::modeWrite);
CFile src(TEXT("b.txt"), CFile::modeRead);
dst.SeekToEnd();
LPSTR pszBuf = (LPSTR)::malloc(src.GetLength());
src.Read(pszBuf, src.GetLength());
dst.Write(pszBuf, src.GetLength());
::free(pszBuf);
    • good
    • 0
この回答へのお礼

exeファイルと同じ場所にテキストを置いて実行しましたが、
合成されたファイルは生成されませんでした。
しかし、CFileで書いたコードを試したところ、期待動作をさせることができました。
大変助かりました。ありがとうございました。

お礼日時:2009/06/07 10:52

 こんばんは。

以下で出来ませんか。
 ::system("copy a.txt + b.txt c.txt");

この回答への補足

ご回答ありがとうございます。
ご教示頂いたコードそのまま実行しましたが、
テキストの内容はそのままで、期待動作となりませんでした。。
何か他に操作もしくは条件が必要なのでしょうか?

補足日時:2009/05/31 16:00
    • good
    • 0

連結はcopyコマンドでも可能です。



copy a.txt+b.txt c.txt
又は、
copy *.txt c.txt

この回答への補足

ご回答ありがとうございます。
DOSプロンプト環境ではなく、C++のプログラム上で処理を行いたいのです。
情報が足りず申し訳ありませんでした。

補足日時:2009/05/24 17:33
    • good
    • 0

>例えば、Linuxでいうcatコマンドのような方法があれば理想的なのですが。


windowsはtypeコマンドで
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q復元ポイントの作成とイメージファイル等のバックアップとの違いについて

今晩は、宜しくお願いします。

復元ポイントの作成とイメージファイル等のバックアップとの違いについて教えて下さい。

Windowsで復元ポイントからシステムを復元させる方法があり、
また、イメージファイル等にバックアップをとり、復元させる方法もありますが
この両者はどのように違うのでしょうか。

復元ポイントの作成とは、その時点のシステムの設定等だけを保存しているという
ことでしょうか。

また、イメージファイル等のバックアップを作成するということは
システム設定と作成したファイル等もイメージファイルとして一括してバックアップ
されるのでしょうか。

イメージファイルの復元時に、作成したファイル等もイメージファイルから
復元されるのなら、同じ名前のファイルがあった場合には、
イメージファイル作成時の古い情報のファイルになってしまうのでしょうか。

以上、宜しくお願いします。

Aベストアンサー

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。修復されるのは、選択した項目により異なる。
WindowsREを利用。
https://msdn.microsoft.com/ja-jp/library/hh825173.aspx

【バックアップと復元】
システムのバックアップを作成し、ハードディスクなどが壊れた場合に備えパソコン内部のデータを全てバックアップ・復元出来る。
Windowsのインストールディスクや、システム修復ディスクから復元が可能。
システムもユーザーデータもバックアップを取った時点の状態に戻る。

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。...続きを読む

Qc:\Winodows\Sendotoとc:\Windows\デスクトップについて

設定によってはシステムをc:\Winodowsからc:\winにできるから
c:\Winodows\Sendotoとc:\Windows\デスクトップを
c:\win\Sendotoとc:\win\デスクトップにできます

同じように"Sendoto"と"デスクトップ"を例えば"Send"と"desktop"のように他の名前にできるのでしょうか?
できたとするとどのように命名されているかはどこを見れば良いのでしょうか?

Sendotoのファイル等はデスクトップ上の右クリックメニューの送るに表示され
デスクトップのファイル等は起動後に真っ先に現れる画面に表示されますね

よろしくお願いします

Aベストアンサー

SHGetSpecialFolderLocationを使ってください。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=235894

Q救出ファイル復元 2の機能について

「救出ファイル復元 2」で画像ファイルJPEGの他にRAWファイル、拡張子(CR2)を復元出来るでしょうか。

キャノンの一眼デジカメを使っているのですが、他の復元ソフトでは、復元出来ませんでした。

Aベストアンサー

Vectorあたりで『ディスク・ファイル復旧』の項目で探せばみつかりそうですが。
要は,"復元ソフトで復元できるファイルがソフトに登録されている拡張子だけしかできない"ことですので,拡張子を選択できる復元ソフトを捜せばいいと思われます。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/disk/care/

QC言語:引数の型だけ異なる関数を一つにまとめる方法

以下の引数の型だけ異なる関数を、どうにかして一つにまとめたいのですが、
何か良い方法はないでしょうか?

void funcA(_MNGR_TAG mngr){
処理X;
}
void funcB(_COPY_MNGR_TAG mngr){
処理X;
}
補足:
・_NODE_TAGと_COPY_NODE_TAGは構造体です。ただし中身は異なります。
・(引数名が同じため)funcAとfuncBで行っている処理は全く同じです。
注意事項:
関数テーブルやC++言語を使用する方法は除いて下さい

Aベストアンサー

まあ、_MNGR_TAG と _COPY_MNGR_TAG の両方ともいじっていいなら
struct _MNGR {
(_MNGR_TAG と _COPY_MNGR_TAG の共通要素)
union {
_MNGR_TAG_ONLY mngr_tag; /*_MNGR_TAG 固有の要素*/
_COPY_MNGR_TAG_ONLY copy_mngr_tag; /*_COPY_MNGR_TAG 固有の要素*/
} depends;
};
とするとか、共通部分を構造体 MNGR_COMMON に切り出して
struct _MNGR_TAG {
struct MNGR_COMMON common;
(以下、_MNGR_TAG 固有の要素)
};
struct _COPY_MNGR_TAG {
struct MNGR_COMMON common;
(以下、_COPY_MNGR_TAG 固有の要素)
};
とした後 MNGR_COMMON を引数にして処理Xを行う関数を作るとかありますが、

でもこれ、オブジェクト指向が理解できていないといつか破綻すると思いますよ。
さもないと共通処理Y(Xとは異なる引数を要する)が出てきたときに困りますから。

まあ、_MNGR_TAG と _COPY_MNGR_TAG の両方ともいじっていいなら
struct _MNGR {
(_MNGR_TAG と _COPY_MNGR_TAG の共通要素)
union {
_MNGR_TAG_ONLY mngr_tag; /*_MNGR_TAG 固有の要素*/
_COPY_MNGR_TAG_ONLY copy_mngr_tag; /*_COPY_MNGR_TAG 固有の要素*/
} depends;
};
とするとか、共通部分を構造体 MNGR_COMMON に切り出して
struct _MNGR_TAG {
struct MNGR_COMMON common;
(以下、_MNGR_TAG 固有の要素)
};
struct _COPY_MNGR_TAG {
struct MNGR_COMMON common;
(以下、_COPY_MNGR_TAG 固有の要素)
...続きを読む

Q削除した画像ファイルの取り出しまたは復元方法

ごみ箱に入れてから削除したファイルの復元方法を教えてください。

以前にも同様の質問をしたのですが、その際に教えていただいた方法で確かにいくつかのファイルは復元することができました。

しかし、一番復元したい画像ファイル(jpeg形式)が復元できません、同時期に同じく削除したファイルは無事に取り出せたのですが肝心のファイルは取り出せません。指定するファイル名、フォルダ名などの間違いはないのですが何が原因で復元できないのか理解できません。

良きアドバイスをいただければ助かります。
宜しくお願いいたします。

Aベストアンサー

こういったファイル復元ソフトを利用してファイルを復活させます。

●FileRecovery(フリーウェア)

消去・欠損したファイルを復元するソフト。
http://www.pcinspector.de/download.htm

●復元(フリーウェア)
http://www.vector.co.jp/soft/win95/util/se192983.html

■FINALDATA(ファイナルデータ)フォトリカバリー3.0(有料)
http://www.finaldata.ne.jp/f_8_3.html

当然ながら復元できる確立は有料ソフトのほうが高いです。

これらを使っても復元できない場合はファイルが上書きされて完全に消えている可能性が高いです。

Qfoo1.txt、foo2.txt、foo3.txt…とファイル名をつけたいとき

プログラムの一部でファイルを作成しておりまして、
foo1.txt、foo2.txt、foo3.txt…のように
foo+変数.txtとなっており、変数を変える(増やす)ことで複数のファイルを作っていきたいのですが、

このように作成したいファイル名の途中に変数を含んでいる場合、どのようにすればよいのかをご教授願います。

現在、ファイルを作成する関数(関数の中身はおそらく関係してこないと思うので割愛させていただきます)を作成し、
make("foo.txt")のように記述しておりますが詰まってしましました。
どうぞ宜しくお願いします。

Aベストアンサー

つまり
char str[16];
int count;
for(count = 0; count < 10; count++)
{
sprintf(str,"foo%d.txt",count + 1);
}
とすると
strにファイル名が入っている。

Q「ウイルス感染ファイル」削除後のシステム復元でどうなる?

ウイルスバスターで幾つかのウイルス感染ファイル発見し全て削除しましたが、感染したファイルはシステムファイルでしたので少し心配でしたが削除しました。
そこで教えて頂きたいのですが、感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?

Aベストアンサー

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライブにOSのインストールディスクを入れておく。
2.「スタート」「コマンドプロンプト」または「ファイル名を指定して実行」で
「sfc /scannow」と入力して「OK」

「Windows XP professional のディスクを入れてください」という表示が出ることがありますがHome Editionであれば「無視」を選んでスキップしてください

>感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?
出来ないことはないでしょうが、あまりお勧めできません。
現在の状態が正常でない。
過去の状態の方が快適に操作できる。
という場合、それがいいかもしれません。
しかし、Windowsの設定というのは非常に広範囲にわたっており、現在と過去を比較して、どちらが適正かを判断するのは容易ではありません。
また、過去の復元ポイントの中には不正な設定が含まれている場合があり、間違って、そのポイントを選択することもあります。
ウィルス対策ソフトのサイトでは一旦復元設定を無効にして、過去の復元ポイントを全て消去することを推奨しています。

>一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?
間違った操作をすると汚染されたファイルが復元されてしまいます。
一旦復元設定を無効にして、過去の復元ポイントを全て消去することで汚染されたファイルは二度と復元しません。

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライ...続きを読む

QMicrosoft Visual C++でのエラー「fatal error C1014: インクルード ファイルが多すぎます : 深さ = 1024」について

タイトルに書きましたが、Microsoft Visual C++で実行(?)した際に、エラーがある時は下の欄にいろいろ出てくると思いますが、先ほど「fatal error C1014: インクルード ファイルが多すぎます : 深さ = 1024」というエラーがでてきました。

絶対にあってるだろう簡単なプログラムでも毎回そうなってしまします。

どういうことなのでしょうか?

初心者なのですがよろしくお願いします。

Aベストアンサー

VC++6.0あたりまでですと、プリコンパイル済みヘッダーなんかが悪さして、まともにコンパイルできないって事は良くありました。
表記のエラーは記憶に無いですが。

試しにプリコンパイル済みヘッダーを使用しない設定にするとか、フルビルドをかけてみるとか。

815644 - C1010 エラーの情報: 最も多くの共通の原因
http://support.microsoft.com/kb/815644/ja


> #include <stdio.h>
> ~

> このコードでも同様のエラーなんです。

VC++だと、stdio.hを直接書き換えるなんて事も可能だったハズ。
間違って書き換えちゃったとかって事は?


あるいは、コンパイル時の設定で、#defineが無効になるような所をいじってしまったとか。

Q復元ソフトのふと感じた疑問 -ファイル名を削除したい-

先日、復元ソフトを使用していたときに感じたことなのですが
(使用ソフトは「復元」です。)
ファイルを復元する際の手順で削除したファイルが検索できますよね。
このファイル検索の時に、HITしないようにファイル名を完全に削除したい場合はどのようにすればいいのでしょうか??

例えば、「●●との秘密旅行001.jpg」のファイルを削除したとします。
その後、復元ソフトで検索をかけるとファイルを復元しなくてもファイル名を見ただけで怪しいファイルとわかってしまいますよね。
復元ソフトの検索で、表示されなくする方法か、別名に変える方法があるのなら教えてください。

Aベストアンサー

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名前を消去したいファイルをクリックするか、名前を消去したい複数ファイルを左クリックしながら選択する→[消去]ボタンをクリック→[OK]をクリック

これで、名前を消せます。しかしながら完璧ではなくて、一部消せないこともあります。
(「DataRecovery」を再起動してもう一度ドライブをスキャンすると消せなかったファイルが表示されます)

参考URL:http://www.vector.co.jp/soft/win95/util/se382922.html

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名...続きを読む

QC++/CLI System::String::Fotmat 16進表記

お世話になります

C++/CLIを使用して、16進表記で悩んでいます
Format( "0x{0:x2}, 1 );
期待する値は、"0x01"ですが、"0x1"と表記されてしまいます

Formatを使用した場合は仕方ないのでしょうか?
ほかにマネージを"0x%2x"のように変換する方法を
ご存知の方がいらっしゃいましたら、御教授願います
よろしくおねがいします

Aベストアンサー

リーディング0などの書式指定は無かったと思います

String^ str = String::Format("0x{0,2:X}", 1 ).Replase(" ", "0");
などで代替処理してはいかがでしょう

{0,2:X}は 最初の引数を2桁16進数の文字列に変換されます

String::Format("0x{0,2:X}", 1 )で "0x 1"となるので
この文字列中のスペースを『0』に置換したものを取得します


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報