Как сохранить многострочное текстовое поле в виде одной строки в текстовом файле? - PullRequest
5 голосов
/ 16 декабря 2010

Хорошо, ребята, я делаю функцию для сохранения файла. Я столкнулся с проблемой в том, что когда я сохраняю данные из многострочных текстовых полей, он сохраняет х количество строк как х количество строк в текстовом файле.

Например, если пользователь ввел:

line one
line two
line three

будет отображаться как:

line one
line two
line three

, поскольку я хочу, чтобы это отображалось как:

line one \n line two \n line three \n

Код, который у меня есть:

                savefile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                savefile.Title = "Save your file";
                savefile.FileName = "";
                savefile.Filter = "ChemFile (*.cd)|*.cd|All Files|*.*";

                if (savefile.ShowDialog() != DialogResult.Cancel)
                {                    
                   // save the text file information
                    for (int i = 0; i < noofcrit; i++)
                    {
                        cdfile[i] = crittextbs[i].Text;
                    }                    
                }
                    // Compile the file
                    SaveFile = savefile.FileName;
                    System.IO.File.WriteAllLines(SaveFile, cdfile);

Есть идеи, как сохранить многострочные текстовые файлы в одну строку? Спасибо.

Ответы [ 4 ]

4 голосов
/ 16 декабря 2010

Замените Newline символ на @" \n " или " \\n ", используя @, чтобы игнорировать любой escape-символ

   string s= yourTextBox.Text.Replace(Environment.NewLine, @" \n "));
2 голосов
/ 16 декабря 2010

Я думаю, вам может понадобиться что-то подобное. На самом деле я не уверен, что лучший способ - показать экранирующих персонажей. Также я бы использовал StreamWriter.

string myData = txtMyTextBox.Text.Replace("\r"," \\r ").Replace("\n"," \\n ");
using(System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath))
{
     sw.Write(myData);
}
2 голосов
/ 16 декабря 2010

Если вы получаете многострочные строки в строковом массиве, вы можете просто соединить их в одну строку:

string[] multiline = new []{"multi","line","text"};
string singleLine = string.Join(@"\n",multiline);

, если это все в одной строке, простая замена заменит эту задачу

string singleLine = multiline.Replace("\r",string.Empty).Replace("\n",@"\n");
1 голос
/ 16 декабря 2010

Это действительно одна строка;)

Многострочные текстовые поля в зависимости от платформы (Win32 здесь) будут сохранены как:

Линия \ г \ п Линия \ г \ п Линия \ г \ п

Так что вам просто нужно заменить \ r \ n на \ n или любую другую замену символа, которую вы хотите.

...