2009-06-15 8 views
1

Ich versuche, einen Pfad in meine Eingabe Varaible zu speichern, aber es liest nicht meine Eingabe! Ich debugge und überspringe die Zeile komplett!C# Ich lese meine Eingabe nicht

public static void OpenFile(int FileSize) 
    { 
     char GetLines = ' '; 
     char[] FileContents = new char[FileSize]; 

     Console.WriteLine("Enter a Path Name: "); 
     GetLines = (char)Console.Read(); 
     GetLines = (char)Console.Read(); // Getting No Input Y? 

     StreamReader MyStream = File.OpenText(GetLines.ToString()); 


     while (GetLines != null) 
     { 
      Console.WriteLine(FileContents); 
      GetLines = (char)MyStream.Read(); 
     } 
     MyStream.Close(); 


    } 

Alles andere funktioniert gut. Diese Funktion wird in Main aufgerufen ... Meine Ziele ist immer noch zu versuchen, den Inhalt der Datei in ein Array zu lesen.

DIES IST KEINE HAUSAUFGABE! =)

+0

Als Char kann GetLines niemals Null sein, damit Ihre While-Schleife nie endet.Der Compiler hat wahrscheinlich davor gewarnt. –

Antwort

3

Warum verwenden Sie nicht nur Console.ReadLine() und MyStream.Readline()?

Hier ist ein Stream Beispiel:

public class ReadTextFile 
{ 
    public static int Main(string[] args) 
    { 
     Console.Write("Enter a File Path:"); 
     string fileName = Console.Readline(); 
     StreamReader reader = File.OpenText(fileName); 
     string input = reader.ReadLine(); 
     while (input != null) 
     { 
      Console.WriteLine(input); 
      input = reader.ReadLine(); 
     } 
     reader.close; 
     return 0; 
    } 
} 
0

Sind Sie sicher, dass Sie Console.Read verwenden möchten? Es liest das nächste Zeichen aus der Eingabe (1 Zeichen). Wenn Sie stattdessen Console.ReadLine verwenden, wird eine vollständige Zeile angezeigt.

Auch im Code oben GetLines enthält nur das zweite Zeichen Ihrer Eingabe, wenn ich es richtig interpretieren (die zweite Console.Read Linie den Inhalt des GetLines Variable ersetzen).

2

Sie möchten wahrscheinlich Console.ReadLine() versuchen.

Wie es ist, lesen Sie das zweite Zeichen, das der Benutzer eingibt, und behandelt das als einen Pfadnamen.

1
public static void OpenFile(){ 
    string path; 
    while(true){ 
     Console.Write("Enter a path name: "); 
     path = Console.ReadLine(); 
     if(File.Exists(path)) 
      break; 
     Console.WriteLine("File not found"); 
    } 

    string line; 
    using(StreamReader stream = File.OpenText(path)) 
     while((line = stream.ReadLine()) != null) 
      Console.WriteLine(line); 
} 

Wenn Sie den gesamten Inhalt der Datei in einem String benötigen, ändern Sie den letzten Teil der Funktion:

string file; 
    using(StreamReader stream = File.OpenText(path)) 
     line = stream.ReadToEnd(); 

Wenn das, was Sie wirklich brauchen, ist ein Byte-Array ist, zu verwenden:

byte[] file; 
    using(FileStream stream = File.OpenRead(path)){ 
     file = new byte[stream.Length]; 
     stream.Read(file, 0, file.Length); 
    } 
0

Console.Readline() ist wahrscheinlich, was Sie brauchen. Console.Read() liest ein einzelnes Zeichen.

Auch Ihre While-Schleife hat ein Problem. Ein Zeichen wird niemals null sein, da es ein Werttyp ist.

0

Überprüfen Sie die documentation von Console.Lesen Sie, wie es sich verhält.

Nehmen wir an, Sie möchten 'a' und 'b' als aufeinanderfolgende Eingänge eingeben. Console.Read blockt, wenn keine Zeichen im Stream vorhanden sind - es kehrt erst zurück, wenn der Benutzer die Eingabetaste drückt (an diesem Punkt fügt es ein Betriebssystem-abhängiges Zeilenende-Trennzeichen (\ r \ n für Windows) hinzu.) So sagen wir, Sie Eingabe a[Enter]

GetLines = (char)Console.Read(); // blocks till you press enter (since no chars to read) - contains 'a' (97) 
GetLines = (char)Console.Read(); // doesn't block reads \r (13) from the stream 
GetLines = (char)Console.Read(); // doesn't block reads \n (10) from the stream 

Stattdessen Wenn Sie Eingabe abc[Enter] zum ersten Read(), GetLines jeweils a, b und c enthalten würde.

Wie andere hingewiesen haben Sie wahrscheinlich wollen Readline(), die verhält intuitiver