ページ 1 / 1
アーカイブファイルについて
Posted: 2010年5月02日(日) 23:01
by たろう
http://asobinosusume.com/program/prg_arc.php
でファイルをダウンロードして付属のソースをVC++2005で開いて実行したのですが。「マルチ バイト文字セットを使用する」で実行するとアーカイブファイルが出力されるのですが、設定を「UNICODCE文字セット使用する」に変更してコンパイルしようとすると、エラーが出たので
charを全部TCHAR、strcopy,strcatなどを、_tcscopy,_tcscatと変更したのですが。実行はできるのですが、アーカイブファイルが出力されません。なぜでしょうか?また直せばいいところはどこなのでしょうか?
Re:アーカイブファイルについて
Posted: 2010年5月02日(日) 23:38
by たかぎ
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 18:18
by たろう
すみません。どうしたら答えてくれるのでしょうか?
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 18:27
by softya
まず、利用規約をよく読んでください。
マルチポストじゃなくなるためには、質問している他のサイトにお礼を言って質問を終了するか、この質問を閉じてokwaveだけで質問を続けてくださいね。
マルチポストが問題視される理由。
http://ja.wikipedia.org/wiki/%E3%83%9E% ... 9%E3%83%88
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 20:27
by たろう
返信ありがとうございます。そうだったんですか、失礼しました。今質問を終了しました。今後気をつけます。
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 21:58
by たかぎ
> 今質問を終了しました。
そういう問題ではないような...。
あちらで回答してくれた方は、解決したのかどうかわからないまま終了されてしまったわけで、釈然としない思いをされたと思いますよ。
ところで、利用規約は熟読しましたか?
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 22:07
by たろう
返信ありがとうございます。読みました。今後このようなことがないよう気をつけます。
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 22:20
by softya
やってしまった事は仕方ないので、今後気をつけてくださいね。
で、まだ問題なのは規約を読まれたと思いますが、圧倒的に情報不足です。
規約のテンプレに沿って出せるだけの情報を全部出してください。
そうしないと、こちらに手間がかかる上に細かい状況が分からずサポートしようが無いのです。
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 22:41
by たろう
返信ありがとうございます。
アーカイブファイルを作るソフトを
http://asobinosusume.com/program/prg_arc.php
でファイルをダウンロードして付属のソースをVC++2005で開いて実行したのですが。「マルチ バイト文字セットを使用する」で実行するとアーカイブファイルが出力されるのですが、設定を「UNICODCE文字セット使用する」に変更してコンパイルしようとすると、
c:\documents and settings\user\my documents\visual studio 2005\projects\練習3\練習3\main.cpp(108) : error C2664: 'FindFirstFileW' : 1 番目の引数を 'char [64]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
c:\documents and settings\user\my documents\visual studio 2005\projects\練習3\練習3\main.cpp(141) : error C2664: 'errno_t strcpy_s(char *,rsize_t,const char *)' : 3 番目の引数を 'WCHAR [260]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です
というエラーが出たので
charを全部TCHAR、strcopy,strcat,printfなどを、_tcscopy,_tcscat,_tprintfと変更したのですが。実行はできるのですが、アーカイブファイルが出力されません。なぜでしょうか?また直せばいいところはどこなのでしょうか?
今知りたいのはどうやったらアーカイブファイルが出力されるのかということです。
環境はosはwinXpコンパパイラーはVC++2005です。よろしくお願いします。
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 22:51
by softya
たぶん、UNICODEと言うかwchar_tの事を理解できていないんだと思いますが、UNICODEにするのが無理な場合も有り得ます。
手っ取り早く直したソースコードを添付してください。それとUNICODEにする理由も教えてください。無理に変えなくても良いのではありませんか?
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 23:08
by たろう
返信ありがとうございます。
UINICODEにする理由は、「マルチ バイト文字セットを使用する」でreleaseでビルドすると以下のようなエラーが出るからです。(releaseでしたい理由は、友達にあげるためにどうしてもリリースとして出したいのです。)
c:\documents and settings\user\my documents\visual studio 2005\projects\練習3\練習3\main.cpp(108) : error C2664: 'FindFirstFileW' : 1 番目の引数を 'char [64]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
c:\documents and settings\user\my documents\visual studio 2005\projects\練習3\練習3\main.cpp(141) : error C2664: 'errno_t strcpy_s(char *,rsize_t,const char *)' : 3 番目の引数を 'WCHAR [260]' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です
ソースは下記です。
//==============================================================================
// ArcMain
//------------------------------------------------------------------------------
// アーカイブツール
//------------------------------------------------------------------------------
// 詳細
//
//
//==============================================================================
//----------------------------------------------
// ヘッダー
//----------------------------------------------
#include <stdio.h>
#include <windows.h>
#include<TCHAR.h>
#include "arc.h"
//----------------------------------------------
// define
//----------------------------------------------
//----------------------------------------------
// enum
//----------------------------------------------
enum ARGV_TYPE
{
ARGV_TYPE_BAT_NAME,
ARGV_TYPE_BASE_DIR,
ARGV_TYPE_OUT_FILE,
ARGV_TYPE_NUM
};
//--------------------------------------------------------------
// static
//--------------------------------------------------------------
static ArcData g_arc_data;
//--------------------------------------------------------------
// プロトタイプ
//--------------------------------------------------------------
bool Archive( TCHAR* DirName, TCHAR* SaveName );
//======================================================================================
// メイン
//======================================================================================
//--------------------------------------------------------------
// メイン関数
//--------------------------------------------------------------
void main( int argc, TCHAR *argv[/url] )
{
FILE* fp = NULL;
if( argc != ARGV_TYPE_NUM ){
_tprintf( _T("引数が正しくありません。\n") );
} else {
if( Archive( argv[ARGV_TYPE_BASE_DI[/url], argv[ARGV_TYPE_OUT_FILE] ) == false ){
_tprintf( _T("正常に終了しました。\n") );
}
}
//getchar();
}
//--------------------------------------------------------------
// 文字列中の英小文字を大文字に変換
//--------------------------------------------------------------
TCHAR* StrToUpper(TCHAR *s)
{
TCHAR *p;
for (p = s; *p; p++){
if( *p == _T('.') ){
*p = _T('_');
} else {
//*p = toupper(*p);
}
}
return (s);
}
//--------------------------------------------------------------
// アーカイブ
//--------------------------------------------------------------
bool Archive( TCHAR* DirName, TCHAR* SaveName )
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
// ファイル先頭からの位置
unsigned int file_point = sizeof(ArcData);
FILE* archive_file;
FILE* read_file;
// 検索するファイル名
TCHAR search_name[NAME_MAX];
TCHAR save_name[NAME_MAX];
TCHAR new_name[NAME_MAX];
TCHAR parts_name[NAME_MAX];
unsigned int copy_byte;
int loop;
unsigned int copy_loop;
// セーブするファイル名
_tcscpy_s( save_name, NAME_MAX * sizeof( TCHAR ), _T("out\\") );
_tcscat_s( save_name, NAME_MAX * sizeof( TCHAR ), SaveName );
_tcscat_s( save_name, NAME_MAX * sizeof( TCHAR ), _T(".dat") );
// 検索するファイル名を作成
// フォルダ内の全ファイルを指定する
_tcscpy_s( search_name, NAME_MAX * sizeof( TCHAR ), DirName );
_tcscat_s( search_name, NAME_MAX * sizeof( TCHAR ), _T("*.*") );
// 最初の1行だけ実行
hFind = FindFirstFile( search_name, &FindFileData );
if(hFind == INVALID_HANDLE_VALUE) {
_tprintf( _T("!! ERROR !! no file") );
}
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 23:08
by たろう
続きです。
// 最初のファイルはディレクトリなのではずす
FindNextFile( hFind, &FindFileData );
bool max_over = false;
while( true ){
// ファイルを検索
if( FindNextFile( hFind, &FindFileData ) == 0 ){
// エラーチェック
if( GetLastError() == ERROR_NO_MORE_FILES ){
// ファイルがもうないなら終了
break;
} else {
// そうでなければエラーで戻る
FindClose(hFind);
return true;
}
}
if( g_arc_data.count < FILE_MAX ){
// ヘッダに情報を書き込む
g_arc_data.parts[ g_arc_data.count ].point = file_point;
g_arc_data.parts[ g_arc_data.count ].size = FindFileData.nFileSizeLow;
// ファイル名のコピー
_tcscpy_s( g_arc_data.parts[ g_arc_data.count ].name, NAME_MAX * sizeof( TCHAR ), FindFileData.cFileName );
// 格納するファイルの先頭からの位置計算
file_point += FindFileData.nFileSizeLow;
// ファイルの数をカウントする
g_arc_data.count++;
} else {
max_over = true;
g_arc_data.count++;
}
}
if( max_over ){
_tprintf( _T("!! ERROR !! FILE_MAX over : %d > %d\n"), g_arc_data.count, FILE_MAX );
return true;
}
// 検索終了
FindClose( hFind );
// バイナリ書き込みモードでまとめるファイルを開く
_tfopen_s( &archive_file, save_name, _T("w+b") );
// ヘッダ本体
fwrite( &g_arc_data, sizeof( ArcData ), 1, archive_file );
_tprintf( _T("#ifndef __%s_H__\n"), SaveName );
_tprintf( _T("#define __%s_H__\n"), SaveName );
_tprintf( _T("\n\n") );
_tprintf( _T("#define %s_MEMBER \\\n"), SaveName );
for( loop = 0 ; loop < g_arc_data.count ; loop++ ){
// 個別のファイルを1つのファイルにコピーする
_tcscpy_s( new_name, NAME_MAX * sizeof( TCHAR ), DirName );
_tcscat_s( new_name, NAME_MAX * sizeof( TCHAR ), g_arc_data.parts[loop].name );
_tfopen_s( &read_file, new_name, _T("r+b") );
for( copy_loop = 0 ; copy_loop < g_arc_data.parts[loop].size ; copy_loop++ ){
// ファイルサイズ分だけ繰り返す
fread( ©_byte, 1, 1, read_file );
fwrite( ©_byte, 1, 1, archive_file );
}
_tprintf( _T("\t%s"), SaveName );
_tcscpy_s( parts_name, NAME_MAX * sizeof( TCHAR ), g_arc_data.parts[loop].name );
TCHAR* p_parts_name = &parts_name[0];
p_parts_name = StrToUpper( p_parts_name );
_tprintf( _T("( %s, %d ) /* [%d] %s */ \\\n"), parts_name, g_arc_data.parts[loop].size, loop, g_arc_data.parts[loop].name );
fclose( read_file );
}
_tprintf( _T("\n") );
_tprintf( _T("#undef %s\n"), SaveName );
_tprintf( _T("#define %s( _id, _size ) %s_ID_##_id, \n"), SaveName, SaveName );
_tprintf( _T("enum %s_ID\n{\n"), SaveName );
_tprintf( _T("\t %s_MEMBER\n"), SaveName );
_tprintf( _T("\t %s_ID_NUM\n"), SaveName );
_tprintf( _T("};\n\n") );
_tprintf( _T("#endif\n"), SaveName );
// ファイルを閉じる
fclose( archive_file );
// 正常終了
return false;
}
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 23:36
by softya
ソースコードを見ましたが、UNICODEとマルチバイト文字の混在になってしまっています。fopen他がマルチバイト文字のままですから。よく文字コードに付いて理解出来ないままUNICODEを使っても中々ちゃんとしたプログラムは作れないと思いますので、元のまま使った方が良いと思います。
もしかして、元のコードの状態でReleaseで出るエラーはUNICODE/マルチバイト文字セットへの切り替えがDebug/Releaseで各々別に必要であると言うことを理解されていないだけなのではと疑いを持ちましたので、プロパティを確認してみてください。
Re:アーカイブファイルについて
Posted: 2010年5月03日(月) 23:38
by たかぎ
意味がわかりません。
> 「マルチ バイト文字セットを使用する」で実行するとアーカイブファイルが出力されるのですが、
つまり、「マルチ バイト文字セットを使用する」にすればビルドできたということですよね。
にも関わらず、
> 「マルチ バイト文字セットを使用する」でreleaseでビルドすると以下のようなエラーが出るからです。
というのはどういうことでしょうか?
Debug版ならビルドできたということでしょうか?
そんな風にはとても見えませんが...
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 00:18
by たろう
softyaさん
返信ありがとうございます。
>ソースコードを見ましたが、UNICODEとマルチバイト文字の混在になってしまっています。fopen他がマルチバイト文字のままですから。よく文字
>コードに付いて理解出来ないままUNICODEを使っても中々ちゃんとしたプログラムは作れないと思いますので、元のまま使った方が良いと思います。
_tprintfなどはUNICODEではないのでしょうか?
>もしかして、元のコードの状態でReleaseで出るエラーはUNICODE/マルチバイト文字セットへの切り替えがDebug/Releaseで各々別に必要であると言うことを理解されていないだけなのではと疑いを持ちましたので、プロパティを確認してみてください。
Debug/Releaseで変更したらできるようになりました。ありがとうございます。ただUINIDCODEでやる場合はどこをどう変更すればよいのでしょうか?
たかぎさん
返信ありがとうございます。
> 「マルチ バイト文字セットを使用する」でreleaseでビルドすると以下のようなエラーが出るからです。
というのはどういうことでしょうか?
Debug版ならビルドできたということでしょうか?
そんな風にはとても見えませんが...
UNICODE/マルチバイト文字セットへの切り替えをDebug/Releaseにしたらできるようになりました。
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 01:08
by softya
あっ、fopenじゃなくて無いですね。申し訳ない。
ただ、ヘッダの方とか直し忘れてません?どこかにcharが残っていますよ。

Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 07:52
by たろう
返信ありがとうございます。
ヘッダのcharを直しましたが、アーカイブファイルは出力されませんでした。
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 07:56
by たろう
ヘッダーのソースです。
// ヘッダー
//----------------------------------------------
//----------------------------------------------
// define
//----------------------------------------------
#define FILE_MAX (32) // ファイル数
#define NAME_MAX (64) // 名前の長さ
//----------------------------------------------
// プロトタイプ宣言
//----------------------------------------------
//----------------------------------------------
// enum
//----------------------------------------------
//----------------------------------------------
// struct
//----------------------------------------------
struct ArcFileData
{
unsigned int point; // 先頭からのファイルの位置
unsigned int size; // サイズ
TCHAR name[NAME_MAX]; // 名前
};
struct ArcData
{
int count;
ArcFileData parts[FILE_MAX];
};
//----------------------------------------------
// 関数
//----------------------------------------------
#endif
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 10:29
by softya
どんなエラーor問題が出ているか確認されましたか?
推測出来る原因も書き出してみてください。
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 11:59
by たろう
エラーはありません。問題は、アーカイブファイルが作成されないことです。
原因は、不明です。少ない情報ですが、どうかよろしくお願いします。
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 12:06
by softya
本当にですか?
実行したプログラムから何らかのメッセージが出ていませんか?
このプログラム結構ちゃんとエラーチェックしているので、実行時に問題があればエラー状況をテキスト出力してくれるはずですが。
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 12:19
by たろう
releaseのフォルダの中にサイトでダウンロードしたarc/exe/arc_test.bat(ファイルの中をreleaseの~.exeファイルに指定して)を入れてreleaseのarc_test.batを実行してやるとoutの中にARC_TEST.hのファイルが作成されるのですが、その中が!! ERROR !! no fileと出力されます。よろしくお願いします。
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 12:37
by softya
VC++2005のDebugビルドでデバッグしてみましょうか。
111行目辺りの
hFind = FindFirstFile( search_name, &FindFileData );
にブレークポイントを設定してプログラムを実行してみましょう。
プロジェクトのプロパティでデバックの引数に、arc_test.batで書かれていることと同じ内容を記述するのを忘れないでくださいね。main.cppのあるフォルダにinputとoutのフォルダも用意しましょう。
引数:>out\\ARC_TEST.h input\\ ARC_TEST
ブレークポイントの使い方はこちら。
http://cvwww.ee.ous.ac.jp/vc08prog.html
ブレークしたら、変数の所に思っている値が入っているか確認してみてください。
search_nameには、何が入っているべきでしょうか?
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 19:58
by たろう
返信ありがとうございます。TCHARなどに変換した時のソースだと
search_nameは文字化けした文字列です。
マルチバイトでやった場合、
if( argc != ARGV_TYPE_NUM ){
printf( "引数が正しくありません。\n" );
を通ってしまうので、
enum ARGV_TYPE
{
ARGV_TYPE_BAT_NAME,
ARGV_TYPE_BASE_DIR,
ARGV_TYPE_OUT_FILE,
ARGV_TYPE_NUM
};
を変更して
enum ARGV_TYPE
{
ARGV_TYPE_BAT_NAME=1,
ARGV_TYPE_BASE_DIR,
ARGV_TYPE_OUT_FILE,
ARGV_TYPE_NUM
};
に変更したら、通ったのでそのときのsearch_nameはinput\\*.*です。
Re:アーカイブファイルについて
Posted: 2010年5月04日(火) 23:57
by softya
まず、UNICODEで動作が不安定な理由は、NAME_MAX * sizeof( TCHAR )が間違ってます。理由は関数のリファレンスを読み直してみてください。
>マルチバイトでやった場合、
>if( argc != ARGV_TYPE_NUM ){
>printf( "引数が正しくありません。\n" );
>を通ってしまうので、
上が意味もわからず通らないからと言って
>enum ARGV_TYPE
>{
> ARGV_TYPE_BAT_NAME=1,
> ARGV_TYPE_BASE_DIR,
> ARGV_TYPE_OUT_FILE,
> ARGV_TYPE_NUM
>};
とするのは止めましょう。
プログラムは理解して直す癖を付けないと曖昧な部分が堂々増えていきますよ。
Re:アーカイブファイルについて
Posted: 2010年5月05日(水) 08:31
by たろう
返信ありがとうございます。
NAME_MAX * sizeof( TCHAR )を
numberOfElements
コピー先の文字列バッファーのサイズ
と書かれていたのですが,NAME_MAXに直してみたのですが、アーカイブファイルは出力されませんでした。
でもコピー先の文字列バッファーのサイズということは文字列のサイズに要素数を掛けたやつなのでNAME_MAX * sizeof(TCHAR)じゃないのでしょうか?
Re:アーカイブファイルについて
Posted: 2010年5月05日(水) 11:39
by softya
>numberOfElements コピー先の文字列バッファーのサイズ
MSDNの日本語訳が少し変ですね。numberOfElements。と言う事で要素数が正しいです。決してバイト数ではありません。
>NAME_MAXに直してみたのですが、アーカイブファイルは出力されませんでした。
オーバーしているのは重大な問題ですが、小さくなったからと言って出力されないのは別の問題だと思います。
プログラムをステップ実行して、なぜコピーされないのか、どこが問題なのかを調べてください。
Re:アーカイブファイルについて
Posted: 2010年5月05日(水) 17:23
by たろう
返信ありがとうございます。
コピーされないのは、文字列が文字化けしているせいで
void main( int argc, TCHAR *argv[/url] )
argvが文字化けしているせいでファイルがコピーされないのだと思います。
なので、
if( Archive( argv[ARGV_TYPE_BASE_DI[/url], argv[ARGV_TYPE_OUT_FILE] ) == false ){
を
if( Archive( _T("input\\") ,_T("ARC_TEST") ) == false ){
に変更したらアーカイブファイルが出力されました。
ということはargvが変換されていないということでしょうか?
どうしたらargvのコマンド引数を文字化けせずに読み込まれるのでしょうか?
後、ARC_TEST.hの
#define ARC_TEST_MEMBER \
ARC_TEST( listbox1_txt, 62 ) /* [0] listbox1.txt */ \
ARC_TEST( Listbox2_txt, 115 ) /* [1] Listbox2.txt */ \
ARC_TEST( Listbox3_txt, 208 ) /* [2] Listbox3.txt */ \
ARC_TEST( Listbox4_txt, 123 ) /* [3] Listbox4.txt */ \
ARC_TEST( Listdatebase_txt, 1396 ) /* [4] Listdatebase.txt */ \
ARC_TEST( ???_exe, 28672 ) /* [5] ???.exe */ \
ARC_TEST( ?????? ??????_txt, 38 ) /* [6] ?????? ??????.txt */ \
の?????というのが日本語で書いてあるファイルなのですが、日本語に変換されません。
どうしたらよいでしょうか?
Re:アーカイブファイルについて
Posted: 2010年5月05日(水) 18:56
by softya
1番目の問題は、私のところは問題ありません。
本当に文字化けしているのか、argvの値がどうなっているのか全部printfして確かめてみてください。
文字化けしているのなら、別の原因があるはずです。
2番目の問題は、ヘッダに日本語が混ざるとコンパイラの動作として問題なので避けてください。つまり登録するファイルに日本語は使えません。
ただし、私のところはちゃんと表示されるんですけどね(別の問題がある可能性もありますね)。
[補足]
正確に言うと使えないことはないですがファイル名中に空白とかがあると問題が出ます。

Re:アーカイブファイルについて
Posted: 2010年5月05日(水) 19:58
by たろう
返信ありがとうございます。
何とか出力されました。ありがとうございました。
あと、
自分のところだと
_tprintf( _T("(%s, %d ) /* [%d] %s */ \\\n"), parts_name, g_arc_data.parts[loop].size, loop, g_arc_data.parts[loop].name );
のところを
_tprintf( _T("(たろう, %d ) /* [%d] %s */ \\\n"), parts_name, g_arc_data.parts[loop].size, loop, g_arc_data.parts[loop].name );
とやると
ARC_TEST.hのファイルの中が、
ifndef __ARC_TEST_H__
#define __ARC_TEST_H__
#define ARC_TEST_MEMBER \
ARC_TEST( ARC_TEST( ARC_TEST( ARC_TEST( ARC_TEST( ARC_TEST( ARC_TEST(<==ここ
#undef ARC_TEST
#define ARC_TEST( _id, _size ) ARC_TEST_ID_##_id,
enum ARC_TEST_ID
{
ARC_TEST_MEMBER
ARC_TEST_ID_NUM
};
#endif
が腑に落ちないのですが。。。(ここ)が連なってしまうのですが、どなたかわかる方教えてください。
よろしくお願いします。
Re:アーカイブファイルについて
Posted: 2010年5月06日(木) 14:44
by softya
ソースコードをファイル添付してもらっても良いですが、再現性を確かめたいので。
Re:アーカイブファイルについて
Posted: 2010年5月07日(金) 08:17
by たろう
返信ありがとうございます。
ファイルはこれです。よろしくお願いします。
Re:アーカイブファイルについて
Posted: 2010年5月07日(金) 11:32
by softya
見直して気づきました。
文字ロケールがマルチバイト文字のままでした。
ヘッダと
#include <locale.h>
ロケールの設定を行ってください。
_tsetlocale(LC_ALL, _T(""));
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx
こうしないと_ftprintfのコンソールへの出力は、うまく行きません。
Re:アーカイブファイルについて
Posted: 2010年5月07日(金) 18:45
by たろう
回答ありがとうございます。できました!本当にありがとうございました!