2017-12-05 9 views
-3

1) Mein Programm läuft in c fein ++, im just es zu C# zu konvertieren versuchen, muß den ifstream Teil C++ Code helfen Umwandlung:Konvertieren von C++ C#

ifstream data; 
data.open("data.txt"); 
if (data.fail()) { 
    cout << "Error opening file\n"; 
    exit(1); 
} 

Bisher das ist, was ich habe aus Forschung ist Filestream und streamreader C# -Code zu verwenden: Ich will nur sicherstellen, dass es gleichwertig ist.

 if(!File.Exists(data)) 
     { 
      Console.Write("{0} does not exist.", data); 
      return 0; 
     } 
     FileStream fsIn = new FileStream(data, FileMode.Open, 
     FileAccess.Read, FileShare.Read); 
     using (StreamReader sr = new StreamReader(fsIn)) 

2) Als nächstes Teil, wo im aufgeklebt, ist auf der Funktion, wo seine Angenommen, die Daten aus der TXT-Datei zu erhalten und zu speichern, in einen Array (die data.txt Datei wird aus einer Lösung des Projektes hinzugefügt so dass keine uRL in die Datei wurde erforderlich) (unter Verwendung von Visual Studio) C++ Code:

Leere READ_FILE (ifstream & FSIN, float h_temp [], int ARRAY_SIZE, int & valid_entries_high, int & valid_entries_low, float l_temp []) {

while (!data.eof()) // eof = end of file 
{ 
    data >> h_temp[valid_entries_high]; 
    valid_entries_high++; 

    data >> l_temp[valid_entries_low]; 
    valid_entries_low++; 

    if (valid_entries_high + valid_entries_low == array_size) { 
     cout << "Array's full,\n"; 
     break; 
    } 
} 
    if (valid_entries_high == valid_entries_low) 
    { 
     cout << "file is valid" << endl; 
    } 
    else 
    { 
     exit(1); 
    } 
    //check make sure theyre the same length 

}

Hier im mit meinem C# aufgeklebt: public static void READ_FILE (Filestream FSIN, float [] h_temp, int ARRAY_SIZE, ref int valid_entries_high, ref int valid_entries_low, float [] l_temp) {

 while (!fsIn.EndofStream()) // eof = end of file 
     { 
      fsIn >> h_temp[valid_entries_high]; 
      valid_entries_high++; 

      fsIn >> l_temp[valid_entries_low]; 
      valid_entries_low++; 

      if (valid_entries_high + valid_entries_low == array_size) 
      { 
       Console.WriteLine("Array's full,\n"); 
       break; 
      } 
     } 
     if (valid_entries_high == valid_entries_low) 
     { 
      Console.WriteLine("file is valid"); 
     } 
     else 
     { 
      Environment.Exit(1); 
     } 

    } 

Umwandlung, dass die Eingabe < < Zeichen in C# und warum auch .EndofStream nicht funktionieren? Ich benutze sysmtem.io wie das Tutorial sagte, aber es sagt Filestream enthält keine Definition für 'Endofstream'. Ist auch ifstream & das gleiche wie FileStream ref? Jeder Rat wird sehr apperciated!

+4

Sie tun Programm nicht durch "Konvertieren" von in einer Sprache geschriebenem Code in einen komplett anderen. –

Antwort

1

Wir haben keine Ahnung, was Ihr Dateiformat aussieht, aber ich werde eine davon ausgehen, dass Sie jede Zeile in einem Array-Element lesen wollen ...

using System; 
using System.IO; 

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] lines = File.ReadAllLines(@"c:\Developer\TestFile.txt"); 
      foreach (var line in lines) 
      { 
       Console.WriteLine(line); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

Wenn Sie ein bestimmtes Format haben dann Sie Wenn Sie mehr Details benötigen, Bu kann ich die FileHelpers-Bibliothek von GitHub als eine ideale Möglichkeit zum Import von Daten mit Trennzeichen empfehlen, wenn Sie das suchen.

Und ja, wie Neil Butterworth sagte Codierung in einer neuen Sprache genau wie in C++ wäre nicht der Weg nach vorne. .NET ist ein Framework, das für Sie die meiste Schwerstarbeit auf sehr intuitive Weise erledigt. Versuchen Sie nicht, rudimentären Code neu zu schreiben. Ich würde das nicht einmal in C++ tun, ich würde Boost oder Qt verwenden und nur für seltene Szenarien auf das niedrige Niveau runtergehen. Bevor Sie beginnen, Ihren eigenen Code zu schreiben, um Datenstrukturen im Speicher zu sortieren und abzufragen, erfahren Sie mehr über LINQ und verbringen die Zeit, die Sie beim Speichern wichtigerer Dinge sparen.

+0

Vielen Dank, für den großen Rat wird LINQ, – Innovat3

+0

nachschlagen, aber ja, Sie haben richtig angenommen, also wollte ich jede Zeile von Daten in ein Array-Element lesen. Nur zu meiner Verteidigung, ich benutzte nur meinen C++ - Code als Pseudo-Code für meine C# und hatte Schwierigkeiten, einen Befehl in der Sprache x auszudrücken, aber ich verfolge, um zu sehen, welche Anweisung in den Speicher-Aufruf-Stapel usw. geht Nochmals vielen Dank Ihr Code half mir – Innovat3

+0

Ich habe eine andere Antwort hinzugefügt, die zeigt, wie es intern in .NET nur als Referenz getan wird. –

1

Wenn Sie wollen es manuell die einfachste Art und Weise tun, ist so, wie es in der .NET-Framework getan:

String line; 
List<String> lines = new List<String>(); 

using (StreamReader sr = new StreamReader(path, encoding)) 
    while ((line = sr.ReadLine()) != null) 
     lines.Add(line); 

Wenn Sie ein Array gesucht:

string[] linesArray = lines.ToArray();