[問題] CFileDialog取得一筆FileName

看板C_and_CPP (C/C++)作者 (1+1≠2)時間13年前 (2012/07/16 23:46), 編輯推噓1(1016)
留言17則, 4人參與, 最新討論串1/1
CFileDialog 可以設定單選一個檔案或是多選多個檔案 如果,我需要將選取到的檔名放置到一個Edit Control中 我現在想到的做法有二 1.直接抓取選取檔案的第一個檔名 2.將選取的檔案存到CStringList,然後在做排序  再將List內的第一筆資料放到Edit Control欄位中 假設現在有三個檔案ABC.01.TXT、ABC.02.TXT、ABC.03.TXT 使用第一種方式 CString strFileName; strFileName=CFileDialog::GetFileName(); 假設選取第一個檔案(ABC.01.TXT) strFileName="ABC.01.TXT" 假設全部選取三個檔案(ABC.01.TXT、ABC.02.TXT、ABC.03.TXT) strFileName=""ABC.01.TXT" "ABC.02.TXT" "ABC.03.TXT"" 而且,一次選取三個檔案的strFileName內的檔名沒有排序.. 有可能第二次抓就變strFileName=""ABC.03.TXT" "ABC.01.TXT" "ABC.02.TXT"" 那如果我只需要抓到第一筆的檔名,那我該怎麼做呢?? 使用第二種方式 我查文章CFileDialig好像可以再選檔案時,將檔名存入 所以,我就設了一個 CStringList m_lstFileName; 並且在開啟檔案時,將檔案存入 m_lstFileName.AddTail(lpszFileName); 儘管我選取多筆或是一筆,m_lstFileName中count數只有一筆 請問是我少了什麼步驟嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.171.195.193

07/17 00:09, , 1F
那幹嘛不設成 ~OFN_ALLOWMULTISELECT 屬性就好了
07/17 00:09, 1F

07/17 00:21, , 2F
我有設定了!!所以可以選多個檔案...
07/17 00:21, 2F

07/17 00:22, , 3F
但是我只想要在欄位中,只顯示第一個被選到的檔案...
07/17 00:22, 3F

07/17 20:51, , 4F
keyword: CString::Find, CString::Mid
07/17 20:51, 4F
感謝EdisonX大大回覆,您指的應該是我說的第一種方法,我也有想過這種方式 但是會遇到一些問題... 如果選取一個檔案: strFileName="ABC.01.TXT" strFileName = CFileDialog::GetFileName(); int ixFrontQuo=strFileName.Find('"');//回傳值=-1 如果選取三個檔案: strFileName=""ABC.01.TXT" "ABC.02.TXT" "ABC.03.TXT"" strFileName = CFileDialog::GetFileName(); int ixFrontQuo=strFileName.Find('"');//回傳值=0 int ixBackQuo=strFileName.Find('"',ixFrontQuo+1); strOldFileName=strFileName.Mid(ixFrontQuo,ixBackQuo); 得到的結果: strOldFileName=""ABC.02.TXT" 第一個"不是應該是A前面那個嗎??...

07/17 22:04, , 5F
那就分開處理ixFrontQuo==-1跟==0的時候阿~
07/17 22:04, 5F

07/17 22:04, , 6F
==-1就oldfilename=filename, ==0就mid(ixfq+1,ixbq)
07/17 22:04, 6F

07/17 22:12, , 7F
就如 p 大所言,分案例討論,我想你需要分析一下有哪些情況.
07/17 22:12, 7F

07/17 22:15, , 8F
GetStartPosition GetNextPathName
07/17 22:15, 8F
我目前也是使用p大建議的方式, 如果==-1(代表只選取一個檔案),如果==0(代表選取多個檔案) 但是,又遇到另外一個問題是,使用GetFileName最多只能支援63個字元... 後面的都會被刪掉... 請問還有其他方式嗎? ※ 編輯: don750421 來自: 118.171.195.193 (07/17 23:52)

07/18 00:17, , 9F
其實 loveme00835 已經把答案說出來了,回這篇文的人幾乎都
07/18 00:17, 9F

07/18 00:18, , 10F
是到msdn幫你看 member function, http://ppt.cc/4p_w
07/18 00:18, 10F

07/18 00:19, , 11F
我想您可試試 loveme~ 所講的兩個提示,或再找msdn看有沒有
07/18 00:19, 11F

07/18 00:19, , 12F
其他備註說明等.
07/18 00:19, 12F

07/18 00:21, , 13F
附一下 msdn CString func. list. http://ppt.cc/c~RS
07/18 00:21, 13F

07/18 00:23, , 14F
不過 GetFileName 只有63字元讓我意外,我是知道取失敗後會
07/18 00:23, 14F

07/18 00:23, , 15F
傳回 ID_CANCEL 之類的東西。
07/18 00:23, 15F

07/18 00:36, , 16F
可能要allocate自己的buffer? 如前面ppt.cc/4p_w
07/18 00:36, 16F

07/18 06:36, , 17F
嗯, 那篇確實有提到 nMaxFile ,lpstrFile 注意事項。
07/18 06:36, 17F
文章代碼(AID): #1G13TlcK (C_and_CPP)
文章代碼(AID): #1G13TlcK (C_and_CPP)