c# - 文件 IO streamreader + streamwriter C# 的问题

标签 c# file-io streamreader streamwriter

大家好,我是 C# 的新手。我正在尝试做一些文件 io 的事情。当我读写时,它只是在一行上进行。有没有办法推进 streamreader/streamwriter?这是为了学校作业。这是我到目前为止所拥有的。非常感谢。

enter code her class FileIO 
{
    public static void Save(ArrayList vehicleList)
    {

        StreamWriter streamWriter;
        FileStream file = new FileStream(Constants.fileName, FileMode.OpenOrCreate);
        streamWriter = new StreamWriter(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;

        foreach (CommonItem vehicle in vehicleList)
        {
            typeOfVehicle = vehicle.TypeOfVehicle;
            model = vehicle.Model;
            manufactuer = vehicle.Manufactuer;
            year = vehicle.Year;
            vin = vehicle.Vin;
            price = vehicle.InitialPrice;
            purchaseDate = vehicle.PurchaseDate;
            currentOdometerReading = vehicle.CurrentOdometerReading;
            sizeOfEngine = vehicle.EngineSize;

            streamWriter.Write(typeOfVehicle + "~" + manufactuer + "~" + model + "~" + year.ToString() + "~" + vin.ToString() + "~" + price.ToString() + "~" + purchaseDate + "~" + currentOdometerReading.ToString() + "~" + sizeOfEngine.ToString() + "~");

            switch (typeOfVehicle)
            {
                case "Automobile":
                    numOfDoors = ((Automobile)vehicle).NumberOfDoors;
                    typeOfFuel = ((Automobile)vehicle).TypeOfFuel;
                    streamWriter.Write(numOfDoors + "~" + typeOfFuel + "~");
                    break;
                case "Motorcycle":
                    typeOfMotorCycle = ((Motorcycle)vehicle).Type;
                    streamWriter.Write(typeOfMotorCycle + "\n");
                    break;
                case "Truck":
                    cargoCapacity = ((Truck)vehicle).CargoCapacity;
                    towingCapacity = ((Truck)vehicle).TowingCapacity;
                    streamWriter.Write(cargoCapacity + "~" + towingCapacity);
                    break;
            }

            streamWriter.Write("\n");
        }
        streamWriter.Close();

    }

    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()))
        {
            Int32 temp;
            String [] split = tempString.Split('~');
            temp = split.Length;

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

最佳答案

When I read and write it is only doing it on one line. Is there a way to advance the streamreader/streamwriter?

是 - 使用 streamWriter.WriteLine()而不是 streamWriter.Write();

您正在编写的内容看起来像是用“~”分隔的数据 - 您可能需要考虑写出 CSV = comma-separated values ,这很相似,而且非常标准。

也可以代替 ArrayList您应该使用强类型集合 - 在您的情况下,根据您的类结构,您可以使用 List<Vehicle> (如果 AutomobileMotorcycle 都继承自 Vehicle )。

关于c# - 文件 IO streamreader + streamwriter C# 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493268/

相关文章:

c# - 使用 C# 获取应用程序打开的所有 TCP 连接

c# - 将 StreamReader(String) 转换为与 UWP API 兼容?

c# - 覆盖 StreamReader 的 ReadLine 方法

c# - 项目安装程序无法打开另一台计算机上的数据库。我的项目是带有 sqlite 数据库连接的 C# Windows 应用程序

c# - 更改类的反序列化

java - 如何从Java中的某个偏移量读取文件?

c++ - 为什么输入流会跳过 -1 值?

Java 文件 I/O 吞吐量下降

c# - 将 ReadAsStreamAsync 与 StreamReader 一起使用时出现 "stream was not readable"ArgumentException

c# - 将结果分组到数组中的 LINQ 查询