如何使用C#代码读取文件
本文关键字:读取 文件 代码 何使用 | 更新日期: 2023-09-27 18:20:43
我有一个包含两行的文件。并且在哪一行中存在CCD_ 1参数。我想从文件中读取这两行,并将它们保存在一个双精度数组中。我使用了下面的C#代码,但它不起作用。它不读取任何内容,并且在运行代码后数组为空。有人知道我哪里做错了吗?谢谢你的帮助。
private FileStream input;
double[] arr;
int i = 1;
input = new FileStream(Application.StartupPath+"''City.txt", FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(input);
while (!reader.EndOfStream)
{
arr[i] = Convert.ToDouble(reader.ReadLine());
i++;
}
reader.Close();
这是一个完整的示例。
string line;
List<double> values = new List<double>();
string path = Path.Combine(Application.StartupPath, "City.txt");
System.IO.StreamReader file = new System.IO.StreamReader(path);
while((line = file.ReadLine()) != null)
{
values.Add(double.Parse(line));
}
file.Close();
基于"如何:一次一行读取文本文件(MSDN)"
尝试这种方法
using (StreamReader sr = File.OpenText(Application.StartupPath+"''City.txt"))
{
string line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
arr[i] = Convert.ToDouble(line);
i++;
}
}
并且您至少应该初始化arr
:arr = new double[_size]
和i
应该为零,因为c#中的数组是基于零的。更好地使用像List<T>
这样的泛型集合(在本例中为List<double>
)。
问题是while (!reader.EndOfStream)
,因为当您最初在文件末尾的位置读取它时。arr[i]
行应该失败,因为您没有初始化数组(事实上,它甚至不应该编译…)
double[] arr = new double[2];
...
reader.BaseStream.Position = 0;
while (!reader.EndOfStream)
{
arr[i] = Convert.ToDouble(reader.ReadLine());
i++;
}
然而,更直接的方法是这样的:
var arr = new List<double>();
var lines = File.ReadAllLines(Application.StartupPath+"''City.txt");
foreach (var l in lines)
{
arr.Add(Convert.ToDouble(l));
}
return arr.ToArray();
考虑到文件大小较小,另一个选项是使用File.ReadAllLines。
string[] stringDoubles = File.ReadAllLines(path, Encoding.UTF8);
for(int i=0;i<stringDoubles.Length;i++)
arr[i] = Convert.ToDouble(stringDoubles[i]);
您发布的代码不会编译,因为您没有初始化数组,并且在FileStream上有可见性修饰符。我猜这段代码来自您项目中的两个不同位置。
然而,有一种更简单的方法可以做到这一点:File.ReadAllLines
string path = @"c:'dev'text.txt"; //your path here
string[] lines = File.ReadAllLines(path);
double[] doubles = new double[2];
for (int i = 0; i < doubles.Length; i++)
{
double d;
if (double.TryParse(lines[i], out d))
doubles[i] = d;
}