Спасибо всем за ваши ответы. Я реализовал MagicFunction как метод расширения. Он использует ответ Томаса Левеска, но он усилен для обработки всех основных сред И предполагает, что вы хотите, чтобы строка вывода использовала один и тот же терминатор новой строки входной строки.
Я отдал предпочтение ответу Томаса Левеска (над Спенсером Рупортом, Фредриком Морком, Лазарем и Дж. Данкерли), потому что он был лучшим исполнителем. Я опубликую результаты работы в своем блоге и свяжусь здесь позже с заинтересованными.
(Очевидно, что имя функции «MagicFunctionIO» должен быть изменен. Я пошел с «PrependEachLineWith»)
public static string MagicFunctionIO(this string self, string prefix)
{
string terminator = self.GetLineTerminator();
using (StringWriter writer = new StringWriter())
{
using (StringReader reader = new StringReader(self))
{
bool first = true;
string line;
while ((line = reader.ReadLine()) != null)
{
if (!first)
writer.Write(terminator);
writer.Write(prefix + line);
first = false;
}
return writer.ToString();
}
}
}
public static string GetLineTerminator(this string self)
{
if (self.Contains("\r\n")) // windows
return "\r\n";
else if (self.Contains("\n")) // unix
return "\n";
else if (self.Contains("\r")) // mac
return "\r";
else // default, unknown env or no line terminators
return Environment.NewLine;
}
будет работать только с Windows, стиль маркеров новой строки («\ г \ п») –
@Thomas: Environment.NewLine будет работать с любой строкой новой строки ОС. Единственная проблема заключается в том, что разбор файлов Windows на unix или наоборот – JDunkerley
Да, это проблема, о которой я говорю ... Очень часто используется файл UNIX для Windows или наоборот –