C# 文件输出打印超过 1 次

C# file output prints more than 1 time

我有这个代码: Class:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CTesteM7
{
    internal class Borboletas
    {
        public string nomeAmigo { set; get; }
        public string nomeEspecie { set; get; }
        public int envergadura { set; get; }
        public int b { set; get; }
        public string classificacao { set; get; }
        public int quantidade { set; get; }
        public string pathInput { set; get; }
        public string pathOutput { set; get; }
    }
}

主要:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace CTesteM7
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //Lista / Classe
            List<Borboletas> borboletas = new List<Borboletas>();
            Borboletas dados = new Borboletas();

            //Pedir ao utilizador o ficheiro de input
            Console.Write("Nome do ficheiro de input: ");
            dados.pathInput = Console.ReadLine();

            //Verificar se o ficheiro existe
            if (File.Exists(dados.pathInput))
            {
                //Ler o ficheiro
                StreamReader srf = new StreamReader(dados.pathInput);
                while (!srf.EndOfStream)
                {
                    // Buscar a linha do numero ou seja q n contem ;
                    var linha = srf.ReadLine();

                    if (!linha.Contains(';'))
                    {
                        dados.b = int.Parse(linha);
                    }
                    else
                    {
                        string[] strArray;
                        strArray = linha.Split(';');
                        dados.nomeEspecie = strArray[1];
                        dados.envergadura = Convert.ToInt32(strArray[2]);
                        borboletas.Add(dados);

                        //Ficheiro de output
                        dados.pathOutput = @"Output.txt";
                        StreamWriter swo = new StreamWriter(dados.pathOutput, append: true);
                        swo.WriteLine(dados.b);
                        //Verificações da classificação das borboletas e escrever para o ficheiro

                        if (dados.envergadura >= 0 && dados.envergadura <= 50)
                        {
                            dados.classificacao = "Pequena";
                            swo.WriteLine(dados.nomeEspecie + ":" + dados.classificacao);
                        }
                        else if (dados.envergadura >= 51 && dados.envergadura < 70)
                        {
                            dados.classificacao = "Grande";
                            swo.WriteLine(dados.nomeEspecie + ":" + dados.classificacao);
                        }
                        else if (dados.envergadura >= 70)
                        {
                            dados.classificacao = "Gigante";
                            swo.Write(dados.nomeEspecie + ":" + dados.classificacao);
                        }
                        else
                        {

                            Console.WriteLine("Erro");
                        }
                        swo.Close();
                    }

                }


                //Confirmação
                Console.WriteLine("\nOperação realizada com sucesso");
                Console.ReadKey();

                //Fechar os ficheiros
                srf.Close();


                //Adicionar os dados na lista
                borboletas.Add(dados);
            }
            else
            {
                //Caso o ficheiro não exista mostrar erro 
                Console.WriteLine("O ficheiro pedido não existe, insira um nome válido\n");
            }


        }
    }
}

我想将文件中的数据打印到输出文件,但是变量 dados.b(它的数字 3)打印 3 次到输出文件,每次我 运行 它每次添加的程序新文本,但我不想让文本自己重复,output file image

有人知道问题出在哪里吗?谢谢

swo.WriteLine(dados.b);

它在while循环中,所以你会执行3次,你可以添加一个带有计数的标志来只执行一次或者从while循环中取出来!