При использовании потокового ридера мой метод читает только одну строку в файле - PullRequest
0 голосов
/ 21 сентября 2011

while (! String.IsNullOrEmpty (tempString = streamReader.ReadLine ())) Этот цикл повторяется только один раз.Любая помощь приветствуется.Полный метод:

  public static ArrayList Load()
    {
        ArrayList vehicles = new ArrayList();
        FileStream file = new FileStream(Constants.fileName, FileMode.OpenOrCreate);
        StreamReader streamReader = new StreamReader(file);

        String typeOfVehicle = " ";
        String model = " ";
        String manufactuer = " ";
        Int32 year = 0;
        Int32 vin = 0;
        Double price = 0;
        String purchaseDate = " ";
        Int32 currentOdometerReading = 0;
        Double sizeOfEngine = 0;
        String typeOfMotorCycle = " ";
        Int32 numOfDoors = 0;
        String typeOfFuel = " ";
        Double cargoCapacity = 0;
        Double towingCapacity = 0;

        String tempString = " ";

        while (!String.IsNullOrEmpty(tempString = streamReader.ReadLine()))
        {
            String[] split = tempString.Split('~');
            typeOfVehicle = split[0];
            manufactuer = split[1];
            model = split[2];
            year = Convert.ToInt32(split[3]);
            vin = Convert.ToInt32(split[4]);
            price = Convert.ToDouble(split[5]);
            purchaseDate = split[6];
            currentOdometerReading = Convert.ToInt32(split[7]);
            sizeOfEngine = Convert.ToDouble(split[8]);

            if (typeOfVehicle == "Automobile")
            {
                numOfDoors = Convert.ToInt32(split[9]);
                typeOfFuel = split[10];
                Automobile car = new Automobile(manufactuer, model, year, vin, price, purchaseDate, currentOdometerReading, sizeOfEngine, numOfDoors, typeOfFuel);
                VehicleCount.IncreaseCarCount();
                vehicles.Add(car);
            }
            else if (typeOfVehicle == "Motorcycle")
            {
                typeOfMotorCycle = split[9];
                Motorcycle bike = new Motorcycle(manufactuer, model, year, vin, price, purchaseDate, currentOdometerReading, sizeOfEngine, typeOfMotorCycle);
                VehicleCount.IncreaseBikeCount();
                vehicles.Add(bike);
            }
            else
            {
                cargoCapacity = Convert.ToDouble(split[9]);
                towingCapacity = Convert.ToDouble(split[10]);
                Truck truck = new Truck(manufactuer, model, year, vin, price, purchaseDate, currentOdometerReading, sizeOfEngine, cargoCapacity, towingCapacity);
                VehicleCount.IncreaseTruckCount();
                vehicles.Add(truck);
            }
        }

        streamReader.Close();

        return vehicles;
    }

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Попробуйте ниже.

while ((tempString = streamReader.ReadLine()) != null)
{
    // ...
}

Проблема с вашим текущим кодом заключается в выходе из цикла, когда он встречает пустую строку

(!String.IsNullOrEmpty(tempString = streamReader.ReadLine()))
0 голосов
/ 21 сентября 2011

Попробуйте это ...

using (StreamReader streamReader = new StreamReader(file))
{
    string tempString ;
    while ((tempString = streamReader .ReadLine()) != null)
    {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...