首页 > 解决方案 > 为什么流位置走到最后

问题描述

我有一个 csv 文件,在我用 Write 方法覆盖 1 行后,在重新写入文件后,所有内容都已添加到文件末尾,而不是特定行

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using System.Text;
using System.IO;

public class LoadQuestion : MonoBehaviour
{
    int index;

    string path;

    FileStream file;

    StreamReader reader;

    StreamWriter writer;

    public Text City;

    public string[] allQuestion;

    public string[] addedQuestion;

    private void Start()
    {
        index = 0;

        path = Application.dataPath + "/Files/Questions.csv";

        allQuestion = File.ReadAllLines(path, Encoding.GetEncoding(1251));

        file = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);

        writer = new StreamWriter(file, Encoding.GetEncoding(1251));

        reader = new StreamReader(file, Encoding.GetEncoding(1251));

        writer.AutoFlush = true;

        List<string> _questions = new List<string>();

        for (int i = 0; i < allQuestion.Length; i++)
        {
            char status = allQuestion[i][0];

            if (status == '0')
            {
                _questions.Add(allQuestion[i]);
            }
        }

        addedQuestion = _questions.ToArray();

        City.text = ParseToCity(addedQuestion[0]);
    }

    private string ParseToCity(string current)
    {
        string _city = "";

        string[] data = current.Split(';');

        _city = data[2];

        return _city;
    }


    private void OnApplicationQuit()
    {
        writer.Close();
        reader.Close();
        file.Close();
    }

    public void IKnow()
    {
        string[] quest = addedQuestion[index].Split(';');

        int indexFromFile = int.Parse(quest[1]);

        string questBeforeAnsver = "";

        for (int i = 0; i < quest.Length; i++)
        {
            if (i == 0)
            {
                questBeforeAnsver += "1";
            }
            else
            {
                questBeforeAnsver += ";" + quest[i];
            }
        }

        Debug.Log("indexFromFile : " + indexFromFile);

        for (int i = 0; i < allQuestion.Length; i++)
        {
            if (i == indexFromFile)
            {
                writer.Write(questBeforeAnsver);
                break;
            }
            else
            {
                reader.ReadLine();
            }
        }

        reader.DiscardBufferedData();

        reader.BaseStream.Seek(0, SeekOrigin.Begin);

        if (index < addedQuestion.Length - 1)
        {
            index++;
        }

        City.text = ParseToCity(addedQuestion[index]);
    }

}

文件中有几行按类型:

0;0;非洲
0;1;伦敦
0;2;巴黎

底线是,这是一个游戏,只有那些状态为 0 的问题,即未回答的问题,才会从文件中下载。而如果在游戏过程中用户点击知道答案,那么文件中有一行被覆盖,只有状态不再是0,而是1,当重复游戏时,这个问题将不会加载。

对我来说,第一个问题被成功覆盖,所有后续问题都简单地添加到文件末尾:

1;0;非洲
0;1;伦敦
0;2;巴黎 1;1;伦敦 1;2;巴黎

怎么了 ? 视频详细展示了一切

标签: javafilestreamstreamwriter

解决方案


推荐阅读