Сценарий приращения файла каждый раз называется C# - PullRequest
0 голосов
/ 15 апреля 2020

Я звоню по этому сценарию из проекта единства. На данный момент я пытаюсь увеличивать файл каждый раз, когда вызывается скрипт.

Так что, как только он вызван, он читает данные, сохраняет данные в файл.

Сейчас он создает только файл alpha0.csv и не печатает новый файл, если я вызываю Сценарий снова.

Может кто-нибудь подсказать мне, как решить эту проблему.

using UnityEngine;
using System;
using System.Collections;
using System.IO.Ports;
using System.IO;
using System.Management;
using Microsoft.Win32;
using System.Collections.Generic;


public class ArduinoControl : MonoBehaviour
{

    SerialPort arduino;
    public string portName = "COM5";
    public static bool status ;
    public string test = "alpha";
    private static int counter;
    private static int lineCount;
    private static string receivedstring = string.Empty;

    void Start()
    {
        arduino = new SerialPort(portName, 115200);
        arduino.Open();
        status = true;     
    }


    void Update()
    {
        if (arduino.IsOpen)
        {
            if (status)  // (& UnityCommand = "F")  
            {
                arduino.Write("s");
                arduino.ReadTimeout = 5000;
                arduino.WriteTimeout = 5000;
                receivedstring += arduino.ReadLine() + "\r\n";
                arduino.BaseStream.Flush();
                lineCount++;
                if(lineCount >= 10 && receivedstring != null)
                {
                    WriteOutputToTextFile(test,receivedstring); // Write to csv here...
                    status = false;
                }
                arduino.BaseStream.Flush();

             }

        }
    }


    //private static int counter;
    static void WriteOutputToTextFile(string path,string _data)
    {
        string FolderName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);   //set destination as your desktop
        using (StreamWriter SW = new StreamWriter($"{FolderName }\\{path}{counter}.csv", false))
         {
            SW.WriteLine(_data);
            SW.Close();
        }
        counter++;
        lineCount = 0;
        receivedstring = string.Empty;
    }


}

1 Ответ

1 голос
/ 16 апреля 2020

Если я правильно понимаю, вы хотите создать новый файл с правильным числовым суффиксом, как в alpha0.csv, alpha1.csv, alpha2.csv ... Это может быть немного трудновато, вы могли бы используйте переменную в более широкой области, как предлагают комментарии, но, поскольку вы сохраняете это на диск, я предполагаю, что вы хотите, чтобы это работало правильно даже между запуском и остановкой вашей программы.


Я бы предложил

  1. Убедитесь, что все ваши файлы находятся в отдельной папке
  2. Прочитайте все имена файлов
  3. Запустите алгоритм 'find max' для суффиксов в вашей папке
  4. Добавьте 1 к этому и используйте его для создания нового файла

Можно выполнить чтение по именам файлов в Unity вот так:

DirectoryInfo dir = new DirectoryInfo("/*your directory*/");
FileInfo[] fileInfos = dir.GetFiles("*.csv");

Тогда для получения следующего суффикса

static readonly string rootName = "Alpha";
int maxFileNumber = 0;
foreach (var f in fileInfos)
{
    string tempName = f.Name;
    tempName = tempName.Substring(0, tempName.Length - ".csv".Length); // remove .csv
    int lengthOfNumber = tempName.Length - rootName.Length; // get the length of the number at the end of the name
    nextFileNumber = int.Parse(tempName.Substring(rootName.Length, lengthOfNumber)); // get the number at the end of the name
    maxFileNumber = nextFileNumber > maxFileNumber ? nextRoomNumber : maxRoomNumber; // find max alorithm
}
nextFileNumber += 1; // next number
string newFileName = rootName + ToString(nextFileNumber)+".csv";
...