C # записать несколько строк в CS-файл - PullRequest
1 голос
/ 17 декабря 2009

Я гуглил и нашел решение на MSDN.

// Compose a string that consists of three lines.
string lines = "First line.\r\nSecond line.\r\nThird line.";

// Write the string to a file.
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt");
file.WriteLine(lines);

file.Close();

Как расширить строки для сложного контента, который включает в себя некоторые естественные строки кода C # например. Я хочу записать информацию ниже в мой файл test.cs.

Почему? Я анализирую схему XML с помощью консольного приложения C #. И я хочу сгенерировать консольный результат в файл .cs во время компиляции.

using System;
using System.Collections.Generic;
using System.Text;

namespace CommonDef
{
    public class CCODEData
    {
        public int iCodeId;
        public string sCode;
        public CODEDType cType;
        public int iOccures;
    }

    [Description("CodeType for XML schema.")]
    public enum CODEDType
    {
        cString = 1,
        cInt = 2,
        cBoolean = 3,
    }

спасибо.

Ответы [ 4 ]

4 голосов
/ 17 декабря 2009

(Я предполагаю, что вы пытаетесь получить результат программным способом - если у вас действительно есть жестко закодированные данные, вы можете использовать подход Konamiman; я согласен, что использование встроенного файла ресурсов было бы лучше, чем огромная дословная строка буквальный.)

В вашем случае я бы посоветовал не пытаться собрать весь файл в одну строку. Вместо этого используйте WriteLine несколько раз:

using (TextWriter writer = File.CreateText("foo.cs"))
{
    foreach (string usingDirective in usingDirectives)
    {
        writer.WriteLine("using {0};", usingDirective);
    }
    writer.WriteLine();
    writer.WriteLine("namespace {0}", targetNamespace);
    // etc
}

Возможно, вы захотите написать вспомогательный тип, позволяющий делать простые отступы и т. Д.

Если эти предложения не помогли, пожалуйста, опишите подробнее вашу ситуацию.

4 голосов
/ 17 декабря 2009

Если ваш исходный код жестко закодирован, как в вашем примере, вы можете использовать буквенную строку C #:

string lines = 
@"using System;
using System.Collections.Generic;
using System.Text;

namespace CommonDef
..."

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

1 голос
/ 17 декабря 2009

Я знаю, что ответ уже принят, но почему бы вместо этого не использовать XSLT, примененный к XML? это будет означать, что вы можете легко сгенерировать c #, vb.net, .net без перекомпиляции приложения.

0 голосов
/ 20 декабря 2013
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FileHandling
{
    class Class1
    {
        static void Main()
        {
            Console.WriteLine("Enter data");
            ConsoleKeyInfo k;
            //Console.WriteLine(k.KeyChar + ", " + k.Key + ", " + k.Modifiers );
            string str="";
            char ch;
            while (true)
            {
                k = Console.ReadKey();
                if ((k.Modifiers == ConsoleModifiers.Control) && (k.KeyChar == 23))
                {
                    Console.WriteLine("\b");
                    break;
                }
                if (k.Key == ConsoleKey.Enter)
                {
                    Console.WriteLine("");
                    str += "\n";
                }
                ch = Convert.ToChar(k.KeyChar);
                str += ch.ToString();
            }
            Console.WriteLine(str);
            Console.Read();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...