Я использую streamwriter для сохранения моих данных игры во время игры в CSV-файле. Чтобы сделать это, я инициализировал свой потоковый блок в начальной функции и написал первую строку для заголовков для моих данных. Затем в функции обновления я пишу переменные игровые переменные в этом файле. Проблема у меня следующая:Как закрыть streamwriter правильно после того, как утверждение более верно?
Это прекрасно работает, и я могу видеть свой файл csv с данными, когда я нажимаю кнопку «остановить» вручную в игре. Однако, когда я жду, пока myTimer (продолжительность игры < = 0), и графический интерфейс перезагружается, я просто получаю пустой CSV-файл. Я думаю, что проблема связана с тем, что я не закрыть мой StreamWriter правильно ... Вот мой код:
// Use this for initialization
public void Start()
{
//create file (txt or csv) with streamwriter which has the name of the Subject and Information which game
swFeedbackGame = File.CreateText (UIManagerScript.SUBJECTID+"FeedbackGameData444.csv");
//write headers to file
swFeedbackGame.Write ("PositionRingFeeback" + "," + "PositionSphereMiddle" + "," + "distanceRingFeedbackTOSphere" + "," + "Collisions" + "," + "Timer"+System.Environment.NewLine);
}
public void SaveDataFeedback()
{
//start writing in file only when feedback game is starting
//if (StartButtonManager.startingGame) {
if (StartButtonManager.startingGame)
{
//get position of center of the ring
PositionRingFeedback = GameObject.Find ("Ring").transform.position;
//position of the center of the ring (y axis)
PositionRINGFeedback = PositionRingFeedback.y;
//error, meaning difference between position of the spheremiddle and center of the ring
distanceRingFeedbackTOSphere = PositionRINGFeedback - Sinewave.posSpheremiddle;
//write data to file _ columns are separated by a ,
swFeedbackGame.Write (PositionRINGFeedback + "," + Sinewave.posSpheremiddle + "," + distanceRingFeedbackTOSphere + "," + CounterManager.counterHitSinewave + "," + UIManagerScript.myTimer + System.Environment.NewLine);
swFeedbackGame.Flush();
}
else
{
swFeedbackGame.Close();
}
}
// Update is called once per frame
public void FixedUpdate()
{
//saves the data from the FeedbackGame every Frame
SaveDataFeedback();
}
могли бы вы, пожалуйста, правильно отступы код –
кажется каждый раз, когда вы перезагрузки файл CSV является заново, проверьте, прежде чем писать, если существует, то текст будет appeand, и если не существует, то создать новый файл – Mostafiz
Как насчет инициализации внутри 'с помощью() {} ', а затем вставить создателя потока в' SaveDataFeedback() 'вместо того, чтобы полагаться на глобальный экземпляр? –