C#将多行写入cs文件

时间:2009-12-17 07:50:48

标签: c# file

我用谷歌搜索并在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文件。

为什么呢?  我正在使用C#控制台应用程序解析XML模式。我想在编译时将生成的控制台结果转换为.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 个答案:

答案 0 :(得分:4)

如果你的源代码是硬编码的,你可以使用C#文字字符串:

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

namespace CommonDef
..."

无论如何,在这种情况下,将整个文本内容作为程序集中的嵌入资源放入文本文件中是一个更好的想法(更具可读性和可维护性),然后使用GetManifestResourceStream读取它。

答案 1 :(得分:4)

(我假设您正在尝试以编程方式构建结果 - 如果您真的拥有硬编码数据,则可以使用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
}

您可能希望编写一个帮助程序类型以允许简单的缩进等。

如果这些建议无效,请详细说明您的具体情况。

答案 2 :(得分:1)

我知道答案已被接受,但为什么不使用应用于XML的XSLT呢?这意味着您可以轻松生成c#,vb.net,.net,而无需重新编译应用程序。

答案 3 :(得分:0)

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();
        }
    }
}