[問題] Qt 開檔案使用ofstream

看板C_and_CPP (C/C++)作者 ( .)時間13年前 (2012/09/17 22:27), 編輯推噓0(0012)
留言12則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: MinGw + Windows XP + Qt 4.7.3, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我使用了Qt的QFileDialog來讓使用者選用要存檔的路徑,取得路徑之後使用 ofstream把使用者想存的內容依據其路徑存到一個txt檔案。 不過,如果使用者選用了有中文名稱的路徑,ofstream在開檔時就會fail。 我試過了QString的toStdString()再轉換成c_str()但是不行。 另外有使用toUtf8()或是toANSI()等函式先轉成QByteArray再換成char*的方法, 但是也行不通。 請問有沒有辦法讓ofstream吃QFileDialog傳回來的含有中文路徑的QString。 餵入的資料(Input): QFileDialog傳回來的含有中文名稱的QString型態路徑變數。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.186.80

09/17 22:41, , 1F
都用 Qt 了為何不用 QFile 就好...
09/17 22:41, 1F

09/17 22:42, , 2F
標準庫的 UTF-8 作法
09/17 22:42, 2F

09/17 22:42, , 3F
忘了貼上網址XD http://goo.gl/YlJQY
09/17 22:42, 3F

09/18 00:52, , 4F
std::wofstream ofs(std::wstring(filename.utf16()));
09/18 00:52, 4F

09/18 00:53, , 5F
filename 是 QString
09/18 00:53, 5F

09/18 00:56, , 6F
這樣也行 std::wofstream ofs(filename.utf16());
09/18 00:56, 6F

09/18 01:00, , 7F
非UNICODE std::ofstream ofs(filename.toLocal8Bit());
09/18 01:00, 7F

09/18 01:40, , 8F
toLocal8Bit 是吐 QByteArray, 後面要加個 .data()
09/18 01:40, 8F

09/18 08:43, , 9F
你在哪個平台使用 qt?
09/18 08:43, 9F

09/18 08:44, , 10F
眼殘, 若是 windows xp 的話, 可能是 big5 編碼的中文檔名
09/18 08:44, 10F

09/18 10:09, , 11F
QFileDialog 給你的就是 unicode 檔名
09/18 10:09, 11F

09/18 10:10, , 12F
如一樓所說的,用 QFile 讀寫,還可跨平台
09/18 10:10, 12F
文章代碼(AID): #1GLpDAsT (C_and_CPP)
文章代碼(AID): #1GLpDAsT (C_and_CPP)