コード例 #1
0
        public ActionResult ChangeFileLineEnding(string fileName, CrLfMode mode)
        {
            var changer = new LineEndingChanger(fileName, mode);

            changer.Execute();
            return(new HttpStatusCodeResult(200));
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
 /// <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);
     }
 }
コード例 #4
0
        /// <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);
                }
            }
        }
コード例 #5
0
        /// <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("Передан неверный тип символа перевода строки.");
            }
        }
コード例 #6
0
        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("Ошибка");
            }
        }
コード例 #7
0
 /// <summary>
 /// Конструктор.
 /// </summary>
 /// <param name="fileName">Имя файла.</param>
 /// <param name="targetMode">Целевой тип символа перевода строки.</param>
 public LineEndingChanger(string fileName, CrLfMode targetMode)
 {
     this.fileName   = fileName;
     this.targetMode = targetMode;
 }