public ActionResult ChangeFileLineEnding(string fileName, CrLfMode mode) { var changer = new LineEndingChanger(fileName, mode); changer.Execute(); return(new HttpStatusCodeResult(200)); }
/// <summary> /// Протестировать замену символа перевода строки. /// </summary> /// <param name="fromMode">Тип перевода строки в исходном файле.</param> /// <param name="toMode">Тип перевода строки в целевом файле.</param> public void TestChanging(CrLfMode fromMode, CrLfMode toMode) { string sourceFileName; this.CreateTestFile(out sourceFileName, fromMode); try { var changer = new LineEndingChanger(sourceFileName, toMode); changer.Execute(); string destFileName; this.CreateTestFile(out destFileName, toMode); try { Assert.IsTrue(this.FilesAreEqual(sourceFileName, destFileName), "Files must be equal."); var checker = new LineEndingChecker(sourceFileName); var resultMode = checker.Check(); Assert.AreEqual(toMode, resultMode); } finally { File.Delete(destFileName); } } finally { File.Delete(sourceFileName); } }
/// <summary> /// Изменить задетекченный режим перевода строки с учетом текущей строки. /// </summary> /// <param name="prevMode">Затетекченный ранее режим.</param> /// <param name="currentMode">Текущий режим.</param> /// <returns>Результирующий режим.</returns> private CrLfMode ChangeDetectedMode(CrLfMode prevMode, CrLfMode currentMode) { if (prevMode == CrLfMode.Unknown) { return(currentMode); } else if (prevMode == currentMode) { return(currentMode); } else { return(CrLfMode.Mixed); } }
/// <summary> /// Создать тестовый файл. /// </summary> /// <param name="fileName">Имя файла.</param> /// <param name="mode">Режим символа перевода строки.</param> private void CreateTestFile(out string fileName, CrLfMode mode) { var sourceStrings = new string[] { "abcd", "efgh", "jklm" }; fileName = Path.GetTempFileName(); using (var fileStream = new FileStream(fileName, FileMode.Open)) { foreach (var sourceString in sourceStrings) { var bytes = Encoding.UTF8.GetBytes(sourceString); fileStream.Write(bytes, 0, bytes.Length); var lineEndingBytes = LineEndingTools.GetLineEndingBytes(mode); fileStream.Write(lineEndingBytes, 0, lineEndingBytes.Length); } } }
/// <summary> /// Получит ьмассив байт с символами перевода строки. /// </summary> /// <param name="mode">Режим перевода строки.</param> /// <returns>Массив байт с символами перевода строки.</returns> public static byte[] GetLineEndingBytes(CrLfMode mode) { switch (mode) { case CrLfMode.Cr: return(new byte[] { 13 }); case CrLfMode.Lf: return(new byte[] { 10 }); case CrLfMode.CrLf: return(new byte[] { 13, 10 }); default: throw new Exception("Передан неверный тип символа перевода строки."); } }
public static string CrLfModeToString(CrLfMode mode) { switch (mode) { case CrLfMode.Cr: return("CR"); case CrLfMode.Lf: return("LF"); case CrLfMode.CrLf: return("CR/LF"); case CrLfMode.Mixed: return("Смешанный"); case CrLfMode.Unknown: return("Неизвестный"); default: return("Ошибка"); } }
/// <summary> /// Конструктор. /// </summary> /// <param name="fileName">Имя файла.</param> /// <param name="targetMode">Целевой тип символа перевода строки.</param> public LineEndingChanger(string fileName, CrLfMode targetMode) { this.fileName = fileName; this.targetMode = targetMode; }