2012-01-26 11 views
1

選択したファイルの(具体的には実行可能ファイルの)内容をプログラムに保存しようとしています。問題は私には分かりません...C++ファイルの内容をプログラムに書き込む

これはプログラムの別のリソースファイルに内容を書き込むことで可能です。例えば

あなたは、実行可能ファイルを持っているとあなたはあなたがC++プログラムを閉じたときに実行ファイルが存在することになるような方法であなたのプログラムでそれを保存したいです。これどうやってやるの?

だから誰でもこれを行う方法を知っていれば(主に実行可能ファイルの内容をC++プログラムで書く)、私にここで答えることで知らせてください。

+1

あなたは何をしようとしているの詳細な例を教えてください。また、これまでに何を試しましたか? – NirMH

+0

さて、ファイルの読み方はわかっていますが、私のC++プログラムを閉じた後に、そこにとどまるC++プログラムにコンテンツを保存する方法がわかりません。 –

+2

新しいファイルを書き込みモードで開き、そこにコンテンツをコピーします。 –

答えて

1

は、Microsoft Visual Studioを使用している場合、それは非常に簡単です: では、リソースダイアログは[インポート]をクリックします、それはあなたが実行可能ファイルをインポートすることができ、その後、ちょうど選ぶように、「すべてのファイル(を。)」を選択あなたが望むファイル。 「カスタムリソースタイプ」ダイアログが表示されたら、「リソースタイプ」フィールドに「RCDATA」と入力します。

ファイルを.RC開いた場合、あなたはこのようなものが表示されます:

///////////////////////////////////////////////////////////////////////////// 
// 
// RCDATA 
// 

IDR_RCDATA1   RCDATA    "myexecutable.exe" 

をし、それがライン以下でRESOURCE.Hを生成します:あなたはこのようにアクセスコードで

#define IDR_RCDATA1     101 

を:

#include "resource.h" 
#include <windows.h> 

int main(int argc, char* argv[]) 
{ 
    HRSRC myResource = ::FindResource(NULL, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA); 
    HGLOBAL myResourceData = ::LoadResource(NULL, myResource); 
    void* pMyExecutable = ::LockResource(myResourceData); 
    return 0; 
} 

ここで、pMyExecutableはこの実行可能ファイルの最初のバイトへのポインタです。このリソースまたは他の有用な情報のサイズを取得するにはどのようにあなたがここにいます:
http://msdn.microsoft.com/en-us/library/ff468902(v=vs.85).aspx

を...ここにあなたがディスク上でこのようにバイナリリソースを節約する方法を例です:

#include "resource.h" 
#include <windows.h> 
#include <fstream> 

int main(int argc, char* argv[]) 
{ 
    HRSRC myResource = ::FindResource(NULL, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA); 
    unsigned int myResourceSize = ::SizeofResource(NULL, myResource); 
    HGLOBAL myResourceData = ::LoadResource(NULL, myResource); 
    void* pMyExecutable = ::LockResource(myResourceData); 

    std::ofstream f("C:\\x.exe", std::ios::out | std::ios::binary); 
    f.write((char*)pMyExecutable, myResourceSize); 
    f.close(); 

    return 0; 
} 

あなたがビルドするときそのようなリソースを持つプロジェクトでは、このリソースは "プログラム"(.exe、.dll、...)の一部になります。

希望します。)

+0

あなたの答えをありがとう、しかし、私はどのように実行時にそれを使用することができますか?単に "リソースファイル/ myfile.exe"を指定するか、いくつかの特別なコードはありますか? –

+1

@Buxme私は自分の答えを更新しました。今これは、この種のリソースをどのように使うかを示しています。楽しむ;) – LihO

1

プログラムのリソースは、Microsoft固有の機能拡張です。 を直接使用すると、コードが移植されなくなります( の問題がある場合もあります)。私がよく使用した別の方法は、resorcesをC++ソースに変換する小さな "preprocessor"を書くことです。これは、 がコンパイルします。

first line 
second line 
third line 

char const* name[] = 
{ 
    "first line", 
    "second line ", 
    "third line", 
    NULL 
}; 

に私はこれをコンパイルして、最終的なプログラムとそれをリンク:外部ファイルは単にテキストであれば、例えば、私は からそれを変換し、何かを書くかもしれません。

関連する問題