Почему позиция потока идет до конца - PullRequest
0 голосов
/ 05 октября 2019

У меня есть файл csv, после того как я перезаписал 1 строку методом Write, после перезаписи в файл все уже добавлено в конец файла, а не в конкретную строку

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; Париж

Что не так? Видео показывает все подробно

...