拡張子のファイル名 – プログラミング – Home

通知
すべてクリア

[解決済] 拡張子のファイル名

固定ページ 1 / 2

ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

VC++初心者ですいません。

やりたいことはフォルダ選択ダイアログで選択されたフォルダ内にあるファイルを拡張
子で検索して存在したら表示ウインドに表示させたいと考えています。
現在、拡張子の検索まではできているのですが、検索された拡張子のファイル名を取得
する方法ができていません。
どうすればファイル名を取得できるのでしょうか?

環境はVisual Studio2005 VC++ Windows XPです。

//フォルダ選択ダイアログ 表示
pIDList = ::SHBrowseForFolder(&bInfo);
if(pIDList == NULL)
{ //キャンセル時
}else{ //選択時
    if(!::SHGetPathFromIDList(pIDList, path))
  { //エラー時
AfxMessageBox(フォルダを選択できません);
}else {
CString FileName = (C:\\Test\\%d\\,bInfo.pszDisplayName);
WIN32_FIND_DATA FileData;
//ファイルの検索
CString FName = FileName+\\*.avi;
HANDLE hFind = FindFirstFile(FName, &FileData);
if(hFind == INVALID_HANDLE_VALUE){
AfxMessageBox(動画ファイルはありません);
}else{
AfxMessageBox(ファイルを発見しました);
// AVIファイルを開く
hAVIWnd = MCIWndCreate(GetDlgItem(IDC_MOVIE)->m_hWnd,AfxGetInstanceHandle
(),MCIWNDF_NOMENU|MCIWNDF_NOOPEN|WS_MAXIMIZE |WS_VISIBLE|WS_CHILD,FName);
}
FindClose(hFind);
}
// 最後にpIDListのポイントしているメモリを開放します
::CoTaskMemFree( pIDList );
}

宜しくご指導下さい。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

??

FindFirstFileの使い方についてちゃんと調べましたか?
MSDNの見てもその物ずばりのソースがちゃんと提示されていますけれど。

WIN32_FIND_DATAの中身がわかれば、自ずとわかりそうな気がします。
調べる時は関数その物だけを調べるのではなくて、その関数が使っている
構造体の中身まで調べるようにしないと解決に結びつかないですよ。


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

PATIOさん

素早い返信有難うございます。

自分の文章の理解不足かもしれませんが、
PATIOさんと認識がずれているような気がします。

PATIOさんが言ってくれているのは、検索された拡張子のファイル名を
取得できるのでしょうか?

例えば、TESTフォルダにtest.aviというAVIファイルがあるとします。
それをTESTフォルダを選択して
\\*.aviをFindfirstFileで検索するとtest.aviというファイル名も取得できるのです
か?

上述している自分のソースをブレークポイントしていくと*.aviのままでtest.aviは取得
できないのですが・・・


返信引用
通行人
 通行人
(@通行人)
ゲスト
結合: 23年前
投稿: 11
 

MSDNをどう読んでも、FindfirstFileが成功すれば、
上のコードだとFileData.cFileName(リファレンスだとFindFileData.cFileName)に
ファイル名があると思うけど。


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

通行人さん

返信ありがとうございます。
違うとこをウォッチしてました。
申し訳ないです。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

FindFirstFile() の MSDN に載っている サンプルそのままです。
http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

どこが違うか、よ~く見比べてください。


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

ありゃ、もう解決してた。。。
失礼しました。


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

bunさんも有難うございます。

ファイル名を取得することは出来たのですが、MCIで取得したAVIファイルが開け
ません。

CString cFName = FileData.cFileName;
hAVIWnd = MCIWndCreate(GetDlgItem(IDC_MOVIE_RANGE)->m_hWnd,AfxGetInstanceHandle
(),MCIWNDF_NOMENU|MCIWNDF_NOOPEN|WS_MAXIMIZE |WS_VISIBLE|WS_CHILD,cFName);

指定されたファイルが見つかりません。パスとファイル名が正しいかどうか確認して下
さい。というエラーが出てしまいます。
ファイル名も間違ってないのになぜでしょうか?


返信引用
ん?
 ん?
(@ん?)
ゲスト
結合: 17年前
投稿: 25
 

cFileName にPath情報はある?


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

ん?さん

返信有難うございます。

Path情報を取得するにはどうすればよいでしょうか?


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

>>CString cFName = FileData.cFileName;
の部分を
CString cFName = (FileName+\\%d,FileData.cFileName);
に変更してPathを取得しましたが
同じエラーが出てしまいます。

どこがいけないのでしょうか?


返信引用
金魚ちゃん
 金魚ちゃん
(@金魚ちゃん)
ゲスト
結合: 16年前
投稿: 52
 

取得しないで検索したパス名を自分で追加すればえぇ。
それだけだと思うな。


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

金魚ちゃんさん

返信有難うございます。

>>取得しないで検索したパス名を自分で追加すればえぇ。

CString cFName = (FileName+\\%d,FileData.cFileName);
ではダメなんですか?


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

その cFName が期待通りになっていることを確認しましたか?
というか、その一行がどういう処理をしているのか、あなたには説明できますか?


返信引用
ヨッピー
 ヨッピー
(@ヨッピー)
ゲスト
結合: 17年前
投稿: 24
Topic starter  

シャノンさん
返信有難うございます。

cFNameは期待通りではありません。
cFileNameのファイル名しか入っておらず、パスまで取得できてませんでした。

>>CString cFName = (FileName+\\%d,FileData.cFileName);
でFileNameとcFileNameを合わせてくれると思ってたんですけどダメでした。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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