Как преобразовать реальный путь CString C++

У меня настоящий путь к окнам:

CString path = "C:\Programs File (x86)\Program folder\exec.exe";

Как я могу преобразовать его в

CString path = "C:\\Programs File (x86)\\Program folder\\exec.exe";

Я попробовал это с path.Replace(L"\\", L"\\\\");, но это не удалось.

Под окнами косая черта также является допустимым разделителем пути. В этом случае преимущество состоит в том, что фиксированная струна имеет ту же длину, что и разорванная.

enhzflep 23.10.2018 08:07

Что значит не удалось? Я спрашиваю, потому что Programs File (x86) написан неправильно, это должно быть Program Files (x86). Это может быть просто опечатка в вопросе ...

Ralara 23.10.2018 10:06

Что вы имеете в виду под этим? Вы получили ошибку компиляции? (потому что ваше непоследовательное использование префикса L выглядит проблематичным.) Или вы пытались распечатать результат замены, и он выглядел не так, как вы хотели? (потому что это может скрывать обратную косую черту.) Т.е. уточните свой вопрос - он неполный.

acraig5075 23.10.2018 10:37

Я рекомендую вам предоставить Минимальный, полный и проверяемый пример, чтобы вы могли получить лучшую помощь.

Ralara 23.10.2018 11:17

Из одного из ваших комментариев я понял, что ваш путь читается из реестра. Если путь - на самом делеC:\Programs File (x86)\Program folder\exec.exe, то конвертировать ничего не нужно. Путь уже действителен. Двойной `\\` нужен только в том случае, если вы используете строковый литерал.

Jabberwocky 23.10.2018 11:27

@enh: разделителем путей в Windows является обратная косая черта. Не все вызовы API преобразуют прямую косую черту в обратную косую черту.

IInspectable 23.10.2018 11:31

Хм, я редко видел так много плохих и отрицательных ответов на плохо заданный вопрос ...

Jabberwocky 23.10.2018 11:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
8
195
1

Ответы 1

В одном из комментариев вы пишете, что ваш путь читается из реестра.

Если путь на самом деле 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

Другие вопросы по теме