2012-08-07 44 views
10

Có ai có thể giúp đỡ sau không? Giả sử tôi có một QString với một filepath lưu trữ của một tập tin nào đó, tôi muốn thay thế / (dấu gạch chéo) từ nó với \\ (backslashes kép) tôi đã cố gắng:Làm thế nào để thay thế '/' bằng '\' bằng cách sử dụng thay thế QString()?

mystring.replace("/","\\"); 

Nhưng nó chỉ đặt một đơn \ thay vì \\

Chuỗi trước khi thay thế: D:/myfiles/abc.zip

Chuỗi sau khi thay thế: D:\myfiles\abc.zip

Expec ted chuỗi: D:\\myfiles\\abc.zip

+0

Không thực sự chắc chắn, nhưng như xa như tôi nhớ QFile/QFileInfo vui vẻ làm việc với bất kỳ phân cách thư mục – friendzis

+0

Tôi ngạc nhiên điều này thực sự biên dịch. Bạn không thoát khỏi '' 'đóng với' '' thứ ba? Và bạn sử dụng ngôn ngữ nào? C++? – CodesInChaos

+0

Nhưng adb cần '\\': p Tôi đang tạo công cụ adb tự động :) –

Trả lời

23

Bạn cần phải sử dụng:

mystring.replace("/","\\\\"); 

Trình biên dịch sử dụng \ như một nhân vật chạy thoát trong chuỗi (cho những thứ như \t, \n hoặc \r) để \\ là thực sự biến thành \. Nếu bạn cần hai dấu gạch chéo ngược, bạn cần phải bắt đầu với bốn dấu gạch chéo ngược.

0

1) Tại sao bạn muốn thay thế chúng, AFAIR forward slashes cũng làm việc trong các thao tác tệp (không phân biệt hệ điều hành).
2) Bạn đã cố đọc tài liệu chưa - ví dụ: tại sao \\ kết quả là dấu gạch chéo ngược đơn?

+0

dấu gạch chéo chuyển tiếp không hoạt động khi thực hiện các thao tác adb trong điện thoại Android, do đó chúng cần được thay thế bằng các dấu gạch chéo ngược đôi (thậm chí một dấu gạch chéo ngược không hoạt động: p) –

+0

Bạn có thể đọc phần giải thích được đăng bởi paxdiablo ở trên trong tài liệu, nó mô tả rõ ràng việc sử dụng đơn '\\' làm ký tự thoát. Mỗi nhân vật trốn thoát thoát khỏi ONE nhân vật theo sau nó. –

18

Nếu bạn muốn chuyển đổi đường dẫn sang định dạng Windows, bạn chỉ có thể sử dụng QDir::toNativeSeparators():

qDebug() << QDir::toNativeSeparators("c:/windows/path"); // Prints "c:\windows\path" 
Các vấn đề liên quan