
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (16) « Первая ... 8 9 [10] 11 12 ... 15 16 все ( Перейти к последнему сообщению ) |
Сообщ.
#136
,
|
|
|
Мне как раз ехать, а ты мне предлагаешь привязываться к какой-то определенной IDE.
Цитата korvin @ Ты чего-то не догоняешь. Впрочем тебе уже все разжевали остальные, так что не буду повторяться. Так какого чёрта компилятор должен ругаться на метод foo в Foo? Из-за того, что у него аннотация override? А зачем вы её добавили? Чтобы что? Там и так указано, что Foo <: Bar — это не достаточно информативно? Нужно ещё на все методы override пихать? Чтобы потом убирать? Выглядит как создание пробемы самим себе и героическое её преодоление. |
Сообщ.
#137
,
|
|
|
Цитата applegame @ Мне как раз ехать, а ты мне предлагаешь привязываться к какой-то определенной IDE. Можно подумать в нормальной ситуации ты пользуешься несколькими ![]() |
Сообщ.
#138
,
|
|
|
Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах ест пробелы и слеши/бэкслеши, функции для эскейпа нет, приходится городить свой кошмар.
Да, видимо это он просто с непривычки ругается. Добавлено Цитата Астарот @ Ты намеренно искажаешь смысл? Пользоваться какой-нибудь одной IDE и пользоваться конкретной одной IDE это, по-твоему, одно и то же? Можно подумать в нормальной ситуации ты пользуешься несколькими |
Сообщ.
#139
,
|
|
|
Цитата applegame @ Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах ест пробелы и слеши/бэкслеши, функции для эскейпа нет, приходится городить свой кошмар. Так а в чем проблема вызвать, я вообще в упор не понимаю? Что он сделать хочет? Там у него написан треш какой то непонятный. Например, из того что я понял, вот всякие разные варианты, и далеко не последние: https://rextester.com/FQLFU35600 ![]() ![]() public static void Main(string[] args) { string[] cmd = new string[] { @"C:\Documents and Settings\MyPath\", "--kill-all-humans", "except fry" }; var commandLine1 = String.Format("\"{0}\"", String.Join("\"", cmd)); var commandLine2 = commandLine1.Replace(@"\", @"\\"); var commandLine3 = commandLine2.Replace("\"", "\\\""); var commandLine4 = String.Format("\"{0}\"", String.Join("\"", cmd)).Replace(@"\", @"\\").Replace("\"", "\\\""); var commandLine5 = String.Join("", cmd.Select(a => String.Format(" \"{0}\" ", a))).Replace(@"\", @"\\").Trim(); var commandLine6 = String.Join("", cmd.Select(a => String.Format(" \"{0}\" ", a))).Replace(@"\", @"\\").Replace("\"", "\\\"").Trim(); Console.WriteLine(commandLine1); Console.WriteLine(commandLine2); Console.WriteLine(commandLine3); Console.WriteLine(commandLine4); Console.WriteLine(commandLine5); Console.WriteLine(commandLine6); } Вывод: ![]() ![]() "C:\Documents and Settings\MyPath\"--kill-all-humans"except fry" "C:\\Documents and Settings\\MyPath\\"--kill-all-humans"except fry" \"C:\\Documents and Settings\\MyPath\\\"--kill-all-humans\"except fry\" \"C:\\Documents and Settings\\MyPath\\\"--kill-all-humans\"except fry\" "C:\\Documents and Settings\\MyPath\\" "--kill-all-humans" "except fry" \"C:\\Documents and Settings\\MyPath\\\" \"--kill-all-humans\" \"except fry\" Пусть покажет как он сделал бы такое на С++. Есть еще StringBuilder и регекспы, написать свою функцию экранирования - обычно не составляет труда, от слова совсем. Плюс ко всему есть встроенные возможности: https://docs.microsoft.com/en-us/dotnet/api...etframework-4.8 https://docs.microsoft.com/ru-ru/dotnet/csh...tokens/verbatim |
Сообщ.
#141
,
|
|
|
Цитата Wound @ Ну хз, Киля. Может вы там в своем шарпе привыкли к говну вродеНапример, из того что я понял, вот всякие разные варианты, и далеко не последние: https://rextester.com/FQLFU35600 ![]() ![]() String.Join("", cmd.Select(a => String.Format(" \"{0}\" ", a))).Replace(@"\", @"\\").Replace("\"", "\\\"").Trim(); А мы в своем D как-то привыкли к простому: ![]() ![]() import std.process; ... auto cmd = ["program.exe", `C:\Documents and Settings\MyPath\`, "--kill-all-humans", "except fry"]; ... auto pid = spawnProcess(cmd); Цитата Wound @ Он скорее дешник, чем плюсист. На плюсах еще хуже, ибо плюсы - таки какашка. Впрочем, возможно есть адекватная либка для этого. Пусть покажет как он сделал бы такое на С++. |
Сообщ.
#142
,
|
|
|
Цитата applegame @ А мы в своем D как-то привыкли к простому: твой код выдает: ![]() ![]() td.process.ProcessException@std/process.d(380): Executable file not found: C:\Documents and Settings\MyPath\ ---------------- ??:? @trusted std.process.Pid std.process.spawnProcessImpl(scope const(char[])[], std.stdio.File, std.stdio.File, std.stdio.File, scope const(immutable(char)[][immutable(char)[]]), std.process.Config, const(char)[]) [0x55f41a88ab08] ??:? @trusted std.process.Pid std.process.spawnProcess(scope const(char[])[], std.stdio.File, std.stdio.File, std.stdio.File, const(immutable(char)[][immutable(char)[]]), std.process.Configconst , char[]) [0x55f41a88a7d2] onlineapp.d:7 _Dmain [0x55f41a875067] Добавлено Если нужно просто запустить программу, то кто ему мешает это сделать? ![]() ![]() Process.Start("program.exe", String.Concat(Environment.GetCommandLineArgs())); |
![]() |
Сообщ.
#144
,
|
|
В Сях/Плюсах можно и из кода.
Добавлено Цитата Wound @ Не осилил сути проблемы. Пусть покажет как он сделал бы такое на С++. |
Сообщ.
#145
,
|
|
|
Цитата Wound @ Ну а что он должен тебе выдать? твой код выдает: ![]() Цитата Wound @ Если нужно просто запустить программу, то кто ему мешает это сделать? ![]() ![]() Process.Start("program.exe", String.Concat(Environment.GetCommandLineArgs())); Надо запустить программу со своими аргументами. А ты зачем-то предлагаешь брать в качестве аргументов Environment.GetCommandLineArgs(). Цитата Qraizer @ Суть:Не осилил сути проблемы. Цитата applegame @ Ну вот есть у тебя список аргументов в виде массива строк, и надо вызвать стороннюю программу с этими аргументами. В аргументах есть пробелы и слеши/бэкслеши, В шарпе параметры передаются в запускаемый процесс только в виде строки, причем она должна быть уже экранирована. Человеку не понравилось, что надо руками городить это самое экранирование, которое, как оказывается, не такое уж и тривиальное. |
Сообщ.
#146
,
|
|
|
Цитата Qraizer @ Не осилил сути проблемы. Я если честно тоже. ![]() |
Сообщ.
#147
,
|
|
|
Забейте, короче. Это все же тема Rust vs C++.
|
Сообщ.
#148
,
|
|
|
Цитата applegame @ Ну а что он должен тебе выдать? Понятия не имею. Речь я так понимаю идет про экранирование командной строки. Ну строку пусть выведет что ли, ты у меня спрашиваешь? ![]() Цитата applegame @ Надо запустить программу со своими аргументами. А ты зачем-то предлагаешь брать в качестве аргументов Environment.GetCommandLineArgs(). Хорошо, что мешает тебе написать: ![]() ![]() var cmd = "\"C:\\Documents and Settings\\MyPath\\\" --kill-all-humans \"except fry\""; Process.Start("test.exe", cmd); ? Цитата applegame @ В шарпе параметры передаются в запускаемый процесс только в виде строки, причем она должна быть уже экранирована. Человеку не понравилось, что надо руками городить это самое экранирование, которое, как оказывается, не такое уж и тривиальное. А чем оно не тривиальное? ты можешь сделать это разными способами. Но человек выбрал самый убогий из всех, которые только можно придумать. И решил сделать так. |
Сообщ.
#149
,
|
|
|
Цитата Wound @ Например, то что аргументы пришли откуда-то извне, то есть заранее не известны.Хорошо, что мешает тебе написать: Цитата Wound @ Ну если ты хочешь некое универсальное экранирование, то не тривиально. Я же уже приводил ссылку на Stack Overflow с целыми простынями рассуждений и попыток найти универсальное решение этой задачи. А чем оно не тривиальное? ты можешь сделать это разными способами. Но человек выбрал самый убогий из всех, которые только можно придумать. И решил сделать так. Добавлено На плюсах тоже не просто. Microsoft тоже статью на эту тему запилили: Everyone quotes command line arguments the wrong way |
Сообщ.
#150
,
|
|
|
Цитата applegame @ Например, то что аргументы пришли откуда-то извне, то есть заранее не известны. Да и флаг им в руки откуда они пришли. Хоть с марса, пиши: ![]() ![]() var cmd = $"-key \"{param1}\" --kill-all-humans \"{param2}\""; String.Join - объединяет массив в строку с разделителем. String.Format - формирует строку - как тебе захочется Далее есть ArgumentList - который представляет из себя массив строк. Можешь прям в него запихать аргументы командной строки. |