バッファに格納された文字をエディットボックスに表示 – プログラミング – Home

バッファに格納された文字をエディットボ...
 
通知
すべてクリア

[解決済] バッファに格納された文字をエディットボックスに表示


シュン
 シュン
(@シュン)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

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しか表示されません。

どのように解決すればよろしいでしょうか?
よろしくお願いします。


引用未解決
トピックタグ
シュン
 シュン
(@シュン)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

書き忘れましたが、変数の宣言は

HANDLE hSearch, hFile;
WIN32_FIND_DATA fd;
DWORD writesize;
char filename[MAX_PATH+10];

で行っております。
よろしくお願いいたします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

filename.txt\r\naaa.txt\r\nbbb.txt\r\n.... って長ぁい文字列を生成し、
最後に一発SetDlgItemTextする。


返信引用
シュン
 シュン
(@シュン)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

といいますと、filelist.txtに出力したあとで、再び一行ずつ改行をいれて文字列に格
納しダイアログボックスに格納するという事ですか・・・
filelist.txtはテスト用に作ったファイルだったんですけど、そういう使い方もあるん
ですね。
なるほど、参考になります。

けれど、filenameというバッファに格納された文字列をダイレクトにダイアログボック
スに移すことはできないのでしょうか?


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

基本的な確認事項ですが、そのエディットボックスは「複数行」設定をしてますか。


返信引用
シュン
 シュン
(@シュン)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

Banさま コメントありがとうございます

それは「Edit プロパティ」のスタイルの項目の複数行のところのチェックの話しですよ
ね?
そこは今確認したところ、複数行のところにチェックがいれてあったので問題はないと
思います。


返信引用
え
 え
(@え)
ゲスト
結合: 18年前
投稿: 5
 

何にお困りなのかよくわかりませんが
filelist.txtが不要ならばわざわざファイルに書かないで
変わりにfilelistってバッファにでもアペンドしてけばどうでしょうか?

要はεπιστημηさんのまんまです。
>filename.txt\r\naaa.txt\r\nbbb.txt\r\n.... って長ぁい文字列を生成し
>最後に一発SetDlgItemTextする。

もし、エディットボックスに自動でアペンドさせる方向で考えているのなら
横車だとおもいますよ。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

って、あぁファイルには追記してるのですね。

ファイルへの書き出しも、順次行わずに保存しておいたものを最後に書き出せばいいと
思いますが。


返信引用
シュン
 シュン
(@シュン)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

えさま コメントありがとうございます

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);
}

という無限ループの中で、一つ一つのファイルを改行を追加しながらダイアログボック
スにファイル名を一つずつ追加していっている認識でいるのですが・・・


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

SetDlgItemTextは、追記してくれません。常に新規設定(古いものは上書き)です。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

一応、CEdit::ReplaceSel や EM_REPLACESEL を使って、
追記に近いことはできますが、自動で追記してくれるわけではありません。


返信引用
シュン
 シュン
(@シュン)
ゲスト
結合: 22年前
投稿: 22
Topic starter  

Banさま コメントありがとうございます

それと同時にみなさまご迷惑をおかけしました。
私もたった今その事に気がつきました。。。

ほんと初歩的なミスでした
以後気をつけます


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました