→ 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:我想您可試試 loveme~ 所講的兩個提示,或再找msdn看有沒有 07/18 00:19
→ EdisonX:其他備註說明等. 07/18 00:19
→ 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