2009-12-17 11 views
1

J'ai recherché et trouvé la solution sur MSDN.C# écrire des lignes multiples dans le fichier cs

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

Comment étendre les lignes à contenu complexe, y compris des lignes de code C# naturel. par ex. Je veux écrire les informations ci-dessous dans mon fichier test.cs.

Pourquoi? Je suis en train d'analyser un schéma XML avec C# Console Application. Et je veux générer le résultat de la console dans un fichier .cs pendant la durée du compilateur.

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, 
    } 

merci.

+0

vous voulez lire le fichier cs et l'écrire dans un fichier? ou juste écrire du code codé en dur? – Kobi

+0

Ma pratique: Étape1. J'ai analysé un schéma XML avec C# Console Application. Étape2. Je veux écrire le résultat de la console dans un fichier .cs au moment de la compilation (projet de construction). Étape3. Le nouveau fichier .cs peut être combiné avec mes autres fichiers .cs fils au moment de l'exécution. Je vous remercie. –

Répondre

4

Si votre code source est codé en dur comme dans votre exemple, vous pouvez utiliser une chaîne de caractères C#:

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

namespace CommonDef 
..." 

Quoi qu'il en soit dans de tels cas, il est une meilleure idée (plus lisible et maintenable) pour avoir le texte intégral contenu dans un fichier texte en tant que ressource incorporée dans votre assembly, puis lisez-le en utilisant GetManifestResourceStream.

+0

Certaines lignes comme l'utilisation de System, etc. sont codées en dur. Certaines autres lignes comme le contenu du fichier XSD seraient analysées automatiquement par System.Xml.Schema. Merci. –

4

(Je suppose que vous essayez de construire le résultat par programme - si vous avez vraiment des données codées en dur, vous pouvez utiliser l'approche de Konamiman, je suis d'accord que l'utilisation d'un fichier ressource incorporé serait mieux qu'un énorme verbatim chaîne littérale.)

Dans votre cas, je suggère de ne pas essayer de construire le fichier entier en une seule chaîne. Au lieu de cela, utilisez WriteLine à plusieurs reprises:

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 
} 

Vous pouvez écrire un type d'aide pour permettre indentation simple, etc.

Si ces suggestions ne vous aident pas, s'il vous plaît donner plus de détails sur votre situation.

+0

Merci Jon. C'est une bonne solution pour moi spécial pour la partie du code analyseur XSD. Je vais mettre à jour le mon code de Console.WriteLine() à Writer.WriteLine(). –

1

Je sais qu'une réponse a déjà été acceptée mais pourquoi ne pas utiliser un XSLT appliqué au XML à la place? cela signifierait que vous pourriez facilement générer C#, vb.net, .net sans avoir à recompiler l'application.

+0

Je n'ai jamais appris XSLT auparavant. :-) Quand je planifie mon projet. Je pense juste que je devrais analyser le fichier XSD avec C# ou Perl. Merci pour ton information. –

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

Vous pourriez ajouter quelques description/explications sur votre code. Comme une réponse contenant uniquement du code est une réponse de mauvaise qualité – RononDex

Questions connexes