我试图将路径保存到我的输入变量中,但它没有读取我的输入!我正在调试并完全跳过这条线!
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();
}
其他一切都很好。在Main中调用此函数... 我的目标仍然是尝试将文件的内容读入数组。
这不是家庭作业! =)
答案 0 :(得分: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;
}
}
答案 1 :(得分: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);
}
答案 3 :(得分:0)
您确定要使用Console.Read
吗?它将从输入中读取下一个字符(即1个字符)。如果您改为使用Console.ReadLine
,它将读取一整行。
此外,在上面的代码中GetLines
只包含输入的第二个字符,如果我正确解释它(第二个Console.Read
行将替换GetLines
变量的内容)。
答案 4 :(得分:0)
Console.Readline()可能就是您所需要的。 Console.Read()读取一个字符。
此外,您的while循环有问题。 char永远不会为null,因为它是值类型。
答案 5 :(得分:0)
检查Console.Read的documentation的行为方式。
假设您要输入'a'和'b'作为连续输入。如果流中没有字符,Console.Read会阻塞 - 直到用户按下Enter键才会返回(此时它会添加一个依赖于操作系统的行尾分隔符(对于Windows为\ r \ n)。
所以我们假设您输入了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
相反如果您为第一个Read()输入abc[Enter]
,则GetLines将分别包含a,b和c。
正如其他人指出的那样,你可能想要ReadLine(),它的行为更直观。
答案 6 :(得分:0)
您可以使用Console.Read()实现目标。 请阅读http://msdn.microsoft.com/en-us/library/system.console.read.aspx。