看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《don750421 (1+1≠2)》之銘言: : 這問題和原先的有些雷同,所以我就用原先的問了 : CFileDialog 可以設定選多個檔案 : 那想請問一下,該如何抓到選取到的檔名呢? : 因為我要將原來的舊檔名改為新的檔名... : 但是,我發現如果使用 strFileName=CFileDialog::GetFileName(); : 抓到的檔名並沒有順序性...以上一篇的例子為例 : 三個檔案:ABC.01.TXT、ABC.02.TXT、ABC.03.TXT : 抓到的檔名可能是:strFileName=""ABC.03.TXT" "ABC.01.TXT" "ABC.02.TXT"" : 我使用lpstrFileTitle依序處理選取到的檔案,但如果抓2個以上的檔案就出現NULL : 如果選取一個檔案,則又可以抓到正確的檔案名稱 : 我試著將m_ofn.lpstrFileTitle抓到的值存入陣列中 : 但是,如果我選取三個檔案,試著抓第二筆,仍然失敗= = : 請問我有什麼辦法透過lpstrFileTitle取得所選到的檔案名稱呢?? : CString strOldFileName; : CString strNewFileName; : strOldFileName = pTransDbData.m_ofn.lpstrFileTitle; : if (pTransDbData.m_szFileTitle[0]=='\0'){ : CString temp=pTransDbData.m_szFileTitle[1]; : }else{strOldFileName = pTransDbData.m_ofn.lpstrFileTitle;} 其實MSDN已經講得很清楚了 你要用CFileDialog選多個檔案的話, 首先要設OFN_ALLOWMULTISELECT,這相信你已經做了 然後如果你選了多個檔案, 選到的檔案不是存在m_ofn.lpstrFileTitle中, 而是存在m_ofn.lpstrFile中, 所以要先為m_ofn.lpstrFile要一個buffer存檔案名稱, buffer中會照順序存檔案的路徑,後面跟著選到的檔案的檔名, 可以用GetStartPosition跟GetNextPathName一個一個取出你所選的檔案 我剛剛試了一下,寫了幾行程式,你可以看看 CFileDialog filedlg(TRUE); filedlg.m_ofn.Flags |= OFN_ALLOWMULTISELECT; CString filename; filedlg.m_ofn.lpstrFile = filename.GetBuffer(BUFFER_SIZE); filedlg.m_ofn.nMaxFile = 100; filedlg.DoModal(); POSITION pos = filedlg.GetStartPosition(); CString fn; while(pos != NULL) { fn = filedlg.GetNextPathName(pos) /* Output fn ...... */ } filename.ReleaseBuffer(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.24.220.133
EdisonX:佛心推 07/19 00:33
※ 編輯: jhchou 來自: 60.248.27.163 (07/19 09:49)
don750421:感謝大大,但是後來發現pos離開while迴圈後沒效了.. 07/20 22:52
don750421:把pos設為public也是錯誤的值,後來我使用其他方式抓到 07/20 22:53
don750421:檔名了,謝謝^^ 07/20 22:54