布兰农的回答解释了如何阅读binary数据。如果你想阅读text数据,您应该读取字符串然后解析它们 - 当然,有内置方法。
例如,要读取包含数据的文件:
10
10.5
hello
您可能会使用:
using (TextReader reader = File.OpenText("test.txt"))
{
int x = int.Parse(reader.ReadLine());
double y = double.Parse(reader.ReadLine());
string z = reader.ReadLine();
}
请注意,这没有错误处理。特别是,如果文件不存在、前两行包含不适当的数据或少于两行,它将引发异常。它将留下一个值null
in z
如果文件只有两行。
对于一个可以更优雅地失败的更强大的解决方案,您需要检查是否reader.ReadLine()
回null
(表示文件末尾)并使用int.TryParse
and double.TryParse
而不是Parse
方法。
假设值之间有行分隔符。如果你真的想读取这样的字符串:
10 10.5 hello
那么代码将非常相似:
using (TextReader reader = File.OpenText("test.txt"))
{
string text = reader.ReadLine();
string[] bits = text.Split(' ');
int x = int.Parse(bits[0]);
double y = double.Parse(bits[1]);
string z = bits[2];
}
同样,您需要执行适当的错误检测和处理。请注意,如果文件实际上只包含一行,您可能需要使用File.ReadAllText
相反,让它变得稍微简单一些。还有File.ReadAllLines
它将整个文件读入行的字符串数组中。
编辑:如果您需要分割any空格,那么您可能最好使用以下命令读取整个文件File.ReadAllText
然后使用正则表达式来分割它。那时我确实想知道你如何表示包含空格的字符串。
根据我的经验,您通常对格式的了解比这更多 - 是否会有行分隔符,或同一行中是否有多个值以空格分隔,等等。
我还要补充一点,混合的二进制/文本格式通常很难处理。简单而高效的文本处理往往会读入缓冲区,如果还有二进制数据,这就会出现问题。如果您需要二进制文件中的文本部分,通常最好包含长度前缀,以便可以解码该数据片段。