如何使用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();

如何使用C#代码读取文件

这是一个完整的示例。

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