Могу ли я изменить значение Environment.NewLine? - PullRequest
6 голосов
/ 20 февраля 2009

Я работаю с библиотекой, которая использует Environment.NewLine в качестве символа новой строки при записи файла. Мне нужно, чтобы он писал файлы в формате Unix, и поэтому хотел бы изменить символ новой строки.

Могу ли я изменить значение Environment.NewLine?

Любые другие идеи (кроме преобразования файла после создания файла)?

Ответы [ 7 ]

10 голосов
/ 20 февраля 2009

Могу ли я изменить значение Environment.NewLine?

Нет. Если вы знаете, для какой платформы писать, создайте классы для каждой из этих платформ и дайте им собственную реализацию. В простейшем случае это будет выглядеть следующим образом:

public abstract class Platform { public abstract string Newline { get; } }

public sealed class Unix : Platform {
    public override string Newline { get { return "\n"; } }
}

и т. Д., А затем просто используйте экземпляр соответствующего класса.

2 голосов
/ 20 февраля 2009

Согласно MSDN, класс Environment запечатан, поэтому вы не сможете наследовать его, чтобы изменить значение. Насколько мне известно, это единственный способ, которым вы могли бы. В качестве альтернативы вы можете попытаться создать частичный класс, расширяющий класс Environment. Я никогда не пробовал последнее, поэтому не уверен, что это сработает.

1 голос
/ 20 февраля 2009

Environment.Newline возвращает символ новой строки среды выполнения, в которой находится среда выполнения .Net. Вы не должны использовать это для преобразования символа новой строки в символ новой строки другой платформы.

Я бы порекомендовал реализовать собственный класс для конверсий.

0 голосов
/ 30 ноября 2009

У нас была эта проблема, когда мы должны были изменить значение NewLine на <br /> для веб-вывода.

Это потребовало создания другого свойства для использования в нашем классе. Там действительно нет пути.

0 голосов
/ 20 февраля 2009

Благослови вас Бог, вы не можете ... вы бы полностью изменили весь смысл пространства имен System.Environment.

То, что вы хотите сделать, - это написать что-нибудь для конкретной ОС (независимо от того, в какой среде вы запускаете приложение), то есть в среде. это не то, что вы должны использовать для начала.

0 голосов
/ 20 февраля 2009

Записывает ли сторонняя библиотека в поток или вы передаете ей имя файла?

В первом случае вы можете передать MemoryStream, а затем выполнить замену в новых строках, чтобы получить те, которые вы хотите. В последнем случае получите его для записи во временный файл, а затем передайте в реальный файл (при замене концов строк).

0 голосов
/ 20 февраля 2009

Константа свойства Environment.NewLine, поэтому ее нельзя изменить. Лучшее, что я мог бы порекомендовать, это изменить везде, где это используется, на свою собственную константу.

...