C# 使用arraylist或array的StreamReader

C# 使用arraylist或array的StreamReader,c#,arrays,arraylist,streamreader,C#,Arrays,Arraylist,Streamreader,这是我的密码: StreamReader reader = new StreamReader("war.txt"); string input = null; while ((input = reader.ReadLine()) != null) { Console.WriteLine(input); } reader.Close(); 上面的程序逐行读取并打印文件“war.txt”。我需要重新编写程序,以便它以相反的顺序打印,即最后一行在前,第一行在后。例如,如果“war.txt

这是我的密码:

StreamReader reader = new StreamReader("war.txt");
string input = null;

while ((input = reader.ReadLine()) != null)
{
    Console.WriteLine(input);
}

reader.Close();
上面的程序逐行读取并打印文件“war.txt”。我需要重新编写程序,以便它以相反的顺序打印,即最后一行在前,第一行在后。例如,如果“war.txt”包含以下内容:

Hello.

How are you?

Thank you.

Goodbye.
程序应打印出:

Goodbye.

Thank you.

How are you?

Hello.

我是C#的新手,请帮帮我!谢谢

要做到这一点,您必须对数据进行缓冲(除非您使用
FileStream
API进行一些复杂的工作以向后读取文件)。那就:

var lines = File.ReadAllLines("war.txt");
for(int i = lines.Length - 1; i >= 0; i--)
    Console.WriteLine(lines[i]);
它只是将文件(以行形式)加载到数组中,然后从末尾开始打印数组

LINQ版本的是:

foreach(var line in File.ReadLines("war.txt").Reverse())
    Console.WriteLine(line);

但是坦率地说,数组版本更有效。

您可以使用递归来实现它,如下所示:

void printReverse(int n)
{
   String line = reader.readLine();

   if (n > 0)
     printReverse(n-1);

   System.out.println(line);
}
试一试

完整代码

var list =  File.ReadAllLines(filepath).Reverse().ToList();
           foreach (var l in list)
               Console.WriteLine(l);
实施细节

-反转序列中元素的顺序


-打开一个文本文件,读取该文件的所有行,然后关闭该文件。

查看将行添加到,然后在列表上使用,然后可能使用输出项。

另一个选项:在读取时将每行存储到
堆栈中。读取文件后,弹出堆栈以按相反顺序打印行。

使用可枚举扩展函数,可以缩短打印时间:

foreach(var l in File.ReadAllLines("war.txt").Reverse())
    Console.WriteLine(l);

下面是一个示例,请记住添加“using System.IO”

试一试

{
常数int Size=7;
十进制[]数字=新的十进制[大小];
小数总数=0米;
int指数=0;
StreamReader输入文件;
inputfile=File.OpenText(“Sales.txt”);
while(索引
这是我几年前买的一本教科书的另一个例子,它有最高/最低/平均分数…(记住使用“使用系统IO;”)

私人双倍平均(int[]iArray)

{
int-total=0;
双倍平均;
对于(int index=0;index最高)
{
最高=指数;
}
}
回报最高;
}
私有整数最低值(整数[]iArray)
{
int lower=iArray[0];
对于(int index=1;index

}

对于任何不重要的文件,这可能会破坏堆栈。为什么要在空间上拆分?@MarcGravel-我想我已经删除了它,没有必要了(注意:
file.ReadLines
is.NET 4.0及以上)顺便说一句
StreamReader
IDisposable
;你应该
使用它,也就是说
使用(var reader=newstreamreader(“war.txt”){…}
这对我来说很像家庭作业:)
foreach(var l in File.ReadAllLines("war.txt").Reverse())
    Console.WriteLine(l);
        {
            const int Size = 7;
            decimal[] numbers = new decimal[Size];
            decimal total = 0m;

            int index = 0;

            StreamReader inputfile;

            inputfile = File.OpenText("Sales.txt");

            while (index < numbers.Length && !inputfile.EndOfStream)
            {
                numbers[index] = decimal.Parse(inputfile.ReadLine());
                index++;
            }

            inputfile.Close();

            foreach (decimal Sales in numbers)
            {
                outputlistBox1.Items.Add(Sales);
                total = total + Sales;
            }

            textBox1.Text = total.ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    {
        int total = 0;
        double Average;

        for (int index = 0; index < iArray.Length;
            index++)
       {
            total += iArray[index];
       }

        Average = (double) total / iArray.Length;

        return Average;
    }

    private int Highest(int[] iArray)
    {
        int highest = iArray[0];

        for (int index = 1; index < iArray.Length; index++)
        {
            if (iArray[index] > highest)
            {
                highest = iArray[index];
            }
        }

        return highest;
    }

    private int Lowest(int[] iArray)
    {
        int lowest = iArray[0];

        for (int index = 1; index < iArray.Length; index++)
        {
            if (iArray[index] < lowest)
            {
                lowest = iArray[index];
            }
        }

        return lowest;
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
        try
        {
            const int SIZE = 5;
            int[] Scores = new int [SIZE];
            int index = 0;
            int highestScore;
            int lowestScore;
            double averageScore;
            StreamReader inputFile;

            inputFile = File.OpenText("C:\\Users\\Asus\\Desktop\\TestScores.txt");

            while (!inputFile.EndOfStream && index < Scores.Length)
            {
                Scores[index] = int.Parse(inputFile.ReadLine());
                index++;
            }

            inputFile.Close();

            foreach (int value in Scores)
            {
                listBox1.Items.Add(value);
            }

            highestScore = Highest(Scores);
            lowestScore = Lowest(Scores);
            averageScore = Average(Scores);

            textBox1.Text = highestScore.ToString();
            textBox2.Text = lowestScore.ToString();
            textBox3.Text = averageScore.ToString("n1");

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Close();
    }      
}