Выход из каталога символов в C # - PullRequest
0 голосов
/ 11 января 2012

Мне нужно экранировать символы в имеющейся строке, содержимое которой составляет от C:\\blablabla\blabla\\bla\\SQL.exe до C:\blablabla\blabla\bla\SQL.exe, чтобы я мог запустить процесс на основе этого файла SQL.exe.

Я пробовал с Mystring.Replace("\\", @"\"); и Mystring.Replace(@"\\", @"\");, но ни один не работал.

Как я мог это сделать?

Заранее большое спасибо.

РЕДАКТИРОВАНИЕ: Исправленный тип в строке.

Ответы [ 9 ]

8 голосов
/ 11 января 2012

Я очень сильно подозреваю, что вы просматриваете эту входную строку в отладчике Visual Studio и обманываете себя тем, что на самом деле есть 2 \, тогда как в действительности их нет. Вот почему попытка заменить \\ на \ ничего не делает, потому что в исходной строке нет вхождения \\. И поскольку вы снова просматриваете вывод в отладчике, вы снова дурачите себя, что существует 2 \.

Отладчик Visual Studio имеет тенденцию избегать строк. Запишите его в файл или распечатайте на консоли, и вы увидите, что во входной строке есть один \, и вам не нужно ничего заменять.

4 голосов
/ 11 января 2012

Похоже, вы пытаетесь заменить двойную обратную косую черту (@"\\") в строке одиночной обратной косой чертой (@"\").Если это так, попробуйте следующее

Mystring = Mystring.Replace(@"\\", @"\");

Примечание. Вы уверены, что строка содержит даже двойную обратную косую черту?В некоторых средах один обратный слеш выводится как двойной (например, отладчик).В вашем комментарии упоминается, что мой подход не сработал.Это признак того, что в вашей строке нет двойной обратной косой черты (иначе это сработало бы).

2 голосов
/ 11 января 2012

Символ @ указывает строку как дословную буквенную строку, но это при построении строки.Если вы используете Mystring.Replace("\\", @"\"), то ничто не будет заменено, по сути, так как две строки одинаковы.

Если вы хотите строку без escape-символов, либо определите ее с помощью:

string path = @"C:\Some\Directory\And\File.txt";

Или вы можете заменить \\ на / следующим образом:

path = path.Replace('\\', '/');

Стоит отметить, как отметил Дарин Димитров, что строка, содержащая два символа \, вероятно, простоотображение строки (т. е. при использовании отладчика), а не фактическое значение строки.

1 голос
/ 11 января 2012

Я думаю, что OP спрашивает, как избежать \\ в пути к файлу, если это так, в случае, когда OP не упоминает, где он пытается это использовать.так что я предполагаю.

Затем Вы используете метод Path.Combine (), чтобы получить путь FileName.

Path.Combine () Документация

0 голосов
/ 11 января 2012

Noloman .... когда вы объединяете, возможно, вы пропускаете "\" при объединении каталога .. Я предполагаю, что вы пытаетесь присоединиться к каталогу + некоторому подкаталогу .. @noloman помните, что в C # " c: \ Temp "написано так:" c: \ Temp "или @" c: \ Temp ", один - Литерал, другой - как представить" \ "в унаследованном способе кодирования, потому что" \ "- выход Char и при работе с директориями мы обозначаем все пути и суб-пути с помощью "\" так что, возможно, заменяя «\», вы действительно испортили свой ожидаемый процесс

Mystring = Mystring.Replace(@"\\", @"\"); 

должно работать для вас, если вы действительно не хотите делать Mystring = Mystring.Replace (@ "\", "\"); который, если вы полагаете, что ожидаете, что "\" будет использоваться для создания каталога .. тогда, конечно, он не будет работать .. потому что вы просто заменили обратную косую черту обратным символом .. Я надеюсь, что это делает смысл тебе ..

System.IO.Directory.GetCurrentDirectory (); Вы также используете проблему. SQL Server - это не приложение, выполняющее код. Это ваше приложение .NET, поэтому вам нужно либо поместить местоположение SQL Server в переменную app.config, web.config ect ... отредактируйте свой вопрос и вставьте код, который вы используете, чтобы делать то, что вы хотите делать, независимо от кода SQL Server. Возможно, вы захотите посмотреть на то, хотите ли вы сделать что-то вроде Process. Начать (....) означает имя файла ..?

0 голосов
/ 11 января 2012

Я не понял, что вы хотите, если вы просто хотите получить имя файла (escape-символы каталога), вы можете попробовать:

string fileName = Path.GetFileName(YourString)
0 голосов
/ 11 января 2012

Попробуйте добавить «| DataDirectory | \ MyFile.xyz» там, где вам это нужно.Он работает со строками подключения, он может работать с чем-то другим (я действительно не пытался применить его к чему-то другому).

0 голосов
/ 11 января 2012

Используйте что-то вроде:

myStr = myStr.Replace(@"\\", @"\");

Убедитесь, что вы присваиваете результат метода Replace myStr. Иначе оно уходит в пустоту;)

0 голосов
/ 11 января 2012

где вы смотрите на этот вывод?потому что это может быть строка, которую вы ожидаете, но просмотр значения через отладчик, окно вывода и т. д. выходит за пределы косой черты

...