У меня настоящий путь к окнам:
CString path = "C:\Programs File (x86)\Program folder\exec.exe";
Как я могу преобразовать его в
CString path = "C:\\Programs File (x86)\\Program folder\\exec.exe";
Я попробовал это с path.Replace(L"\\", L"\\\\");
, но это не удалось.
Что значит не удалось? Я спрашиваю, потому что Programs File (x86)
написан неправильно, это должно быть Program Files (x86)
. Это может быть просто опечатка в вопросе ...
Что вы имеете в виду под этим? Вы получили ошибку компиляции? (потому что ваше непоследовательное использование префикса L
выглядит проблематичным.) Или вы пытались распечатать результат замены, и он выглядел не так, как вы хотели? (потому что это может скрывать обратную косую черту.) Т.е. уточните свой вопрос - он неполный.
Я рекомендую вам предоставить Минимальный, полный и проверяемый пример, чтобы вы могли получить лучшую помощь.
Из одного из ваших комментариев я понял, что ваш путь читается из реестра. Если путь - на самом делеC:\Programs File (x86)\Program folder\exec.exe
, то конвертировать ничего не нужно. Путь уже действителен. Двойной `\\` нужен только в том случае, если вы используете строковый литерал.
@enh: разделителем путей в Windows является обратная косая черта. Не все вызовы API преобразуют прямую косую черту в обратную косую черту.
Хм, я редко видел так много плохих и отрицательных ответов на плохо заданный вопрос ...
В одном из комментариев вы пишете, что ваш путь читается из реестра.
Если путь на самом деле C:\Programs File (x86)\Program folder\exec.exe
, вам не нужно ничего конвертировать. Путь уже действителен.
Двойной \\
нужен только в том случае, если вы используете строковый литерал.
Примеры:
Предположим, значение вашего реестра содержит дословно C:\Programs File (x86)\Program folder\exec.exe
.
Фрагмент программы 1:
CString somepath = YourGetFromRegistryFunction();
// now somepath contains the correct path already
AfxMessageBox(somepath); // show the path for debugging purposes
Фрагмент программы 2:
CString somepath = "C:\\Programs File (x86)\\Program folder\\exec.exe";
// now somepath contains the correct path already, the compiler
// replaces the `\\` with a single `\\`
AfxMessageBox(somepath); // show the path for debugging purposes
Под окнами косая черта также является допустимым разделителем пути. В этом случае преимущество состоит в том, что фиксированная струна имеет ту же длину, что и разорванная.