APIを使っております。
タイトルの通りなのですが、以下の様にして、フォルダ内のtxtファイルをタイトルだけ
読み出し、それをダイアログボックス内のエディットボックスに一覧として列挙したい
のですが、うまくいきません。
/////////////////////////////////////////////////////////////////////////////
// ファイル新規作成
hFile = CreateFile(filelist.txt, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
return 0;
}
// 全てのファイルを列挙する
hSearch = FindFirstFile( *.txt, &fd );
if( hSearch == INVALID_HANDLE_VALUE )
{
return 0;
}
while( TRUE )
{
if( !FindNextFile( hSearch, &fd ) )
{
if( GetLastError() == ERROR_NO_MORE_FILES )
{
MessageBox( hWnd, 列挙が終了, 終了, MB_OK );
break;
}
else
{
MessageBox( hWnd, エラー, エラー, MB_OK );
break;
}
}
// 列挙されたファイル名を書き出す
strcpy( filename, fd.cFileName ); // ファイル名をバッファにコピー
strcat( filename, \r\n ); // 末尾に改行文字を加える
WriteFile(hFile, filename, (DWORD)strlen(filename), &writesize, NULL);
SetDlgItemText(hWnd, IDC_EDIT1, filename);
//////////////////////////////////////////////////////////////////////////////
filelistというtxtファイルには
filelist.txt
aaa.txt
bbb.txt
ccc.txt
INPUT.txt
OFFSET.txt
とちゃんとファイル名が列挙されているのですが、ダイアログボックス上のエディット
ボックスにはファイル列挙の最後のOFFSET.txtしか表示されません。
どのように解決すればよろしいでしょうか?
よろしくお願いします。
書き忘れましたが、変数の宣言は
HANDLE hSearch, hFile;
WIN32_FIND_DATA fd;
DWORD writesize;
char filename[MAX_PATH+10];
で行っております。
よろしくお願いいたします。
filename.txt\r\naaa.txt\r\nbbb.txt\r\n.... って長ぁい文字列を生成し、
最後に一発SetDlgItemTextする。
といいますと、filelist.txtに出力したあとで、再び一行ずつ改行をいれて文字列に格
納しダイアログボックスに格納するという事ですか・・・
filelist.txtはテスト用に作ったファイルだったんですけど、そういう使い方もあるん
ですね。
なるほど、参考になります。
けれど、filenameというバッファに格納された文字列をダイレクトにダイアログボック
スに移すことはできないのでしょうか?
基本的な確認事項ですが、そのエディットボックスは「複数行」設定をしてますか。
Banさま コメントありがとうございます
それは「Edit プロパティ」のスタイルの項目の複数行のところのチェックの話しですよ
ね?
そこは今確認したところ、複数行のところにチェックがいれてあったので問題はないと
思います。
何にお困りなのかよくわかりませんが
filelist.txtが不要ならばわざわざファイルに書かないで
変わりにfilelistってバッファにでもアペンドしてけばどうでしょうか?
要はεπιστημηさんのまんまです。
>filename.txt\r\naaa.txt\r\nbbb.txt\r\n.... って長ぁい文字列を生成し
>最後に一発SetDlgItemTextする。
もし、エディットボックスに自動でアペンドさせる方向で考えているのなら
横車だとおもいますよ。
って、あぁファイルには追記してるのですね。
ファイルへの書き出しも、順次行わずに保存しておいたものを最後に書き出せばいいと
思いますが。
えさま コメントありがとうございます
char filename[MAX_PATH+10];というバッファに直接ファイル名を格納しているのです
が、SetDlgItemText(hWnd, IDC_EDIT1, filename);でエディットボックスにセットして
もファイル名が一つしか記入されなくて困っています。
while( TRUE )
{
if( !FindNextFile( hSearch, &fd ) )
{
if( GetLastError() == ERROR_NO_MORE_FILES )
{
MessageBox( hWnd, 列挙が終了, 終了, MB_OK );
break;
}
else
{
MessageBox( hWnd, エラー, エラー, MB_OK );
break;
}
}
// 列挙されたファイル名を書き出す
strcpy( filename, fd.cFileName ); // ファイル名をバッファにコピー
strcat( filename, \r\n ); // 末尾に改行文字を加える
SetDlgItemText(hWnd, IDC_EDIT1, filename);
}
という無限ループの中で、一つ一つのファイルを改行を追加しながらダイアログボック
スにファイル名を一つずつ追加していっている認識でいるのですが・・・
SetDlgItemTextは、追記してくれません。常に新規設定(古いものは上書き)です。
一応、CEdit::ReplaceSel や EM_REPLACESEL を使って、
追記に近いことはできますが、自動で追記してくれるわけではありません。
Banさま コメントありがとうございます
それと同時にみなさまご迷惑をおかけしました。
私もたった今その事に気がつきました。。。
ほんと初歩的なミスでした
以後気をつけます