2009-06-15 6 views
1

私の入力に経路を保存しようとしていますが、私の入力を読み込めません!私はデバッグと完全にラインをスキップして!C#私の入力を読んでいない

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


    } 

他のすべてがうまくいきます。この関数はメインで呼び出されています... 私の目標は、まだファイルの内容を配列に読み込もうとします。

これは職業訓練ではありません! =)

+0

charとして、GetLinesをnullにすることはできないため、whileループは決して終了しません。コンパイラは恐らくそのことについての警告を発しました。 –

答えて

3

なぜConsole.ReadLine()とMyStream.Readline()を使用しないのですか?ここで

はStreamReaderを例です。

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

はあなたがConsole.Readを使用しますか?入力から次の文字が読み込まれます(1文字)。代わりにConsole.ReadLineを使用すると、フルラインが読み込まれます。私は(第2 Console.ReadラインがGetLines変数の内容を置き換えます)それを正しく解釈している場合

また、GetLines上記のコードでは、あなたの入力の唯一の二文字が含まれています。

2

おそらく、Console.ReadLine()を試してみてください。

これは、ユーザーが入力した2番目の文字を読み取って、それをパス名として扱います。

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

あなたは、文字列内のファイルの内容全体が必要な場合は、への関数の後半部分を変更:何が本当に必要なのバイト配列、使用された場合

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

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

Console.Readline()はおそらく必要なものです。 Console.Read()は単一の文字を読み込みます。

また、whileループに問題があります。 charは値型であるためnullにはなりません。

0

Console.Readのdocumentationがどのように動作するかを確認してください。

「a」と「b」を連続した入力として入力したいとします。ストリームに文字がない場合はConsole.Readブロックを使用します。ユーザーがEnterキーを押すまで戻りません(OSに依存する行末デリミタ(Windowsでは\ r \ n)が追加されます)。 So 、GetLinesはそれぞれ、B、およびCが含まれます)最初に読むためにあなたが入力abc[Enter](場合のは、代わりにあなたの入力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 

をしましょう。他の人のよう

あなたはおそらく、ReadLineメソッド(たい指摘している)に動作していますもっと直感的に

関連する問題