#c# #windows #command-line #command-line-arguments #shortcut
Вопрос:
Я не могу перенаправить стандартный вывод в файл, вызвав ярлык в Windows.
он работает напрямую "exe.exe 1 2 1 4 5 6 7 >> log.txt"
,файл журнала успешно сгенерирован.
Я предполагаю, что знак «>>>» принимается в качестве аргумента при использовании shortcut.lnk, поэтому он не генерирует log.txt
как я могу правильно запустить команду или изменить программу, чтобы достичь того, чего я хочу?
вот мой код:
static void Main(string[] args)
{
string acc = "";
string pass = "";
string EmailEnabled = "";
string smtpServer = "";
string sender = "";
string smtpAuth = "";
string receiver = "";
if (args.Length == 7)
{
acc = args[0];
pass = args[1];
EmailEnabled = args[2];
smtpServer = args[3];
sender = args[4];
smtpAuth = args[5];
receiver = args[6];
}
else if (args[2] == "0")
{
acc = args[0];
pass = args[1];
EmailEnabled = args[2];
}
else
{
Console.WriteLine("command line arguments are wrong");
return;
}
}
Скриншоты:
таким образом,»>»принимается в качестве аргумента
другими словами,функция»>» является нормальной в качестве знака перенаправления
Комментарии:
1. в чем конкретно твоя проблема?
2. кстати, вам нужно другое, если блок потенциально вызовет исключение indexoutofrange при передаче одного аргумента или без него
3. ответ на qwr: В ярлыке . файл lnk ,знак «>»принимается в качестве аргументов,а не в качестве знака перенаправления
4. Я понимаю. вы имеете в виду, что пытаетесь вызвать исполняемый файл с помощью ярлыка с аргументами, верно?
5. Запустите новый экземпляр CMD.exe и передайте ему строку, содержащую >>> в качестве аргумента, используя
/C
Ответ №1:
Я считаю, что вопрос связан с Windows больше, чем с C#, поэтому для перенаправления ярлыка
Комментарий @Flydog57
cmd /c "file_shortcut.lnk" bla bla bla >out.txt
иду на С#:
вы можете создать выходной файл с 8-м аргументом и перенаправить стандартный вывод
после этого:
консоль.настройка
вероятно, что-то вроде этого:
using (var writer = args.Length>7? new StreamWriter(args[7]) : new StreamWriter(Console.OpenStandardOutput()))
{
Console.SetOut(writer);
//all codes inside
}