2016-08-08 14 views
0

Hallo Ich habe eine CVS-Datei, die gelesen wird, und ruft und API, um Informationen zu erhalten und wird dann in eine Datei geschrieben, wie unten gezeigt. Derzeit mit nur einer Delimited Record-Klasse.Schreiben von zwei Motoren in die gleiche Datei

 public class EE 
     { 
      [FieldOrder(1)] 
      public string Name; 
      [FieldOrder(2)] 
      public string Description; 
      [FieldOrder(3)] 
     } 


....creating engine.... 

    using (enginev2.BeginWriteFile(@"C:\Update\" + fileName)) 
       { 
        foreach (EEEEoutput in arrayEmployees) 
        { 
         enginev2.WriteNext(EEoutput); 
        } 

      } 

Jetzt muss ich einen anderen begrenzten Datensatz erstellen, da es eine andere Struktur hat, aber ich brauche es in derselben Datei zu schreiben. Das bedeutet, dass zwei verschiedene Filehelper-Engines nacheinander in dieselbe Datei geschrieben werden. Ist das möglich?

Ich habe die Anzahl der Felder aus Gründen des Beispiels vereinfacht. Sie sind beide sehr unterschiedlich und haben viele Felder.

public class EETravel 
     { 
      [FieldOrder(1)] 
      public string TrxType; 
      [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForRead)] 
      [FieldOrder(2)] 
      public string EmployeeID; 
    } 

    using (engineTravel.BeginWriteFile(@"C:\Update\" + fileName)) 
       { 
        foreach (Employees_Travel EEtravel in arrayTravel) 
        { 
         engineTravel.WriteNext(EEtravel); 
        } 

       } 

Wenn ich den Code oben habe, ist es komplett über reitet, was die erste Engine schrieb. Also meine Frage ist, wie bekomme ich die zweite Maschine, wo die erste Maschine aufgehört hat, und aktualisieren Sie dann die Datei?

danke

+1

Erstens, wenn dies in Multithread-Code ist, möchten Sie einige Sperren rund um das Schreiben tun. Zweitens, öffne die Datei zum Anhängen. Drittens suchen Sie vor dem Schreiben an das Ende der Datei, um die Aktualisierungen anderer Codes zu verwalten. – GreatAndPowerfulOz

+0

danke ich habe BeginAppendToFile verwendet und das hat funktioniert. – PanzerRage

Antwort

1
using (engineTravel.BeginAppendToFile(@"C:\Update\" + fileName)) 
       { 
        foreach (EETravel EEtravel in arrayTravel) 
        { 
         engineTravel.WriteNext(EEtravel); 
        } 

       } 

.BeginAppendToFile im zweiten Motor verwendet, und es nahm, wo der andere Motor aufhörte.