看板 C_and_CPP 關於我們 聯絡資訊
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
EdisonX:那幹嘛不設成 ~OFN_ALLOWMULTISELECT 屬性就好了 07/17 00:09
don750421:我有設定了!!所以可以選多個檔案... 07/17 00:21
don750421:但是我只想要在欄位中,只顯示第一個被選到的檔案... 07/17 00:22
EdisonX:keyword: CString::Find, CString::Mid 07/17 20:51
感謝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前面那個嗎??...
purincess:那就分開處理ixFrontQuo==-1跟==0的時候阿~ 07/17 22:04
purincess:==-1就oldfilename=filename, ==0就mid(ixfq+1,ixbq) 07/17 22:04
EdisonX:就如 p 大所言,分案例討論,我想你需要分析一下有哪些情況. 07/17 22:12
loveme00835:GetStartPosition GetNextPathName 07/17 22:15
我目前也是使用p大建議的方式, 如果==-1(代表只選取一個檔案),如果==0(代表選取多個檔案) 但是,又遇到另外一個問題是,使用GetFileName最多只能支援63個字元... 後面的都會被刪掉... 請問還有其他方式嗎? ※ 編輯: don750421 來自: 118.171.195.193 (07/17 23:52)
EdisonX:其實 loveme00835 已經把答案說出來了,回這篇文的人幾乎都 07/18 00:17
EdisonX:是到msdn幫你看 member function, http://ppt.cc/4p_w 07/18 00:18
EdisonX:我想您可試試 loveme~ 所講的兩個提示,或再找msdn看有沒有 07/18 00:19
EdisonX:其他備註說明等. 07/18 00:19
EdisonX:附一下 msdn CString func. list. http://ppt.cc/c~RS 07/18 00:21
EdisonX:不過 GetFileName 只有63字元讓我意外,我是知道取失敗後會 07/18 00:23
EdisonX:傳回 ID_CANCEL 之類的東西。 07/18 00:23
purincess:可能要allocate自己的buffer? 如前面ppt.cc/4p_w 07/18 00:36
EdisonX:嗯, 那篇確實有提到 nMaxFile ,lpstrFile 注意事項。 07/18 06:36