java - 为什么流位置走到最后
问题描述
我有一个 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;巴黎
怎么了 ? 视频详细展示了一切
解决方案
推荐阅读
- salesforce - Salesforce 机会 API 金额的变量值
- wordpress - 如何从当前主页获取所有子页面
- php - Facebook 图形 API PHP 和 cURL
- docker - 访问 docker 容器内的外部读卡器(智能卡读卡器、nfc 读卡器等)设备
- c - 我想访问 C 中另一个结构字段中的通用结构字段
- apache-kafka - 为什么 Flink Cep 一直在等待新的条目来捕捉模式?
- xml - 使用 XSLT 对 xml 中的 uuid 进行排序的问题
- html - 如何使用 Vue 为两个 HTML 页面构建文件?
- azure - 使用 Pulumi 启用 Azure SQL Server 审核
- flutter - 如何在flutter中实现包月?(新方法)