Текстовый файл пуст после построения проекта Unity3D

#c# #unity3d #build #system.io.file

#c# #unity3d #сборка #system.io.file

Вопрос:

Во время выполнения я записываю входные данные, которые я хочу воспроизвести в сборке. Итак, я создаю текстовый файл в каталоге ресурсов, который я заполняю текстом во время выполнения с помощью StreamWriter. Содержимое остается там в режиме сцены после закрытия проекта, но не после его сборки и запуска. Я некоторое время искал в сети, но не нашел ничего, связанного с моей проблемой. Я попытался использовать папку StreamingAssets, но у меня тоже не получилось. Спасибо за любую помощь.

     if (!Directory.Exists("Assets/Resources/Recordings"))
    {
        Directory.CreateDirectory("Assets/Resources/Recordings");
    }

    if (!File.Exists("Assets/Resources/Recordings/Challenge1.txt"))
    {
        File.WriteAllText("Assets/Resources/Recordings/Challenge1.txt", "");
    }
 

Редактировать: переключатель (режим)

      case Mode.Record:
        oldSequence.init ();
        currentSequence.init ();

        inputRecordStream = new StreamWriter (FilePath, false); // will overwrite new file Stream
        if (inputRecordStream.ToString () == "")
        {
            Stop ();
            Debug.Log ("InputReplay: StreamWriter("   FilePath   "), file not found ?");
            return false;
        }
        else
        {
            inputRecordStream.AutoFlush = true;
            SetInputStd ();
        }
        break;
 

Метод записи:

 private void Record(float time)
{
    currentSequence.init ();
    currentSequence.t = time;

    // store only true boolean
    foreach (KeyCode vkey in System.Enum.GetValues(typeof(KeyCode)))
    {
        if (Input.GetKey (vkey))
            currentSequence.gK.Add (vkey);
        if (Input.GetKeyDown (vkey))
            currentSequence.gKD.Add (vkey);
        if (Input.GetKeyUp (vkey))
            currentSequence.gKU.Add (vkey);
    }

    currentSequence.mP = Input.mousePosition;

    currentSequence.mWP = Camera.main.ScreenToWorldPoint (currentSequence.mP);

    currentSequence.mSD = Input.mouseScrollDelta;

    foreach (string virtualAxis in AxisList)
        currentSequence.vA.Add (Input.GetAxis (virtualAxis));

    foreach (string ButtonName in ButtonList)
    {
        if (Input.GetButton (ButtonName))
            currentSequence.vB.Add (ButtonName);
        if (Input.GetButtonDown (ButtonName))
            currentSequence.vBD.Add (ButtonName);
        if (Input.GetButtonUp (ButtonName))
            currentSequence.vBU.Add (ButtonName);
    }

    // only write if something changed
    if (AnyChange(oldSequence, currentSequence))
    {
        //Debug.Log (JsonUtility.ToJson (newSequence));
        inputRecordStream.WriteLine (JsonUtility.ToJson (currentSequence));
        oldSequence = currentSequence;
    }
}
 

Комментарии:

1. ваш файл challenge1.txt пусто, и это нормально, вы пишете «» внутри него.!

2. О, хорошо. Поэтому мне не удалось включить их в сборку, я просто создал в ней новые файлы. Знаете ли вы, как я мог бы включить текстовые файлы, которые я создаю во время выполнения, в сборку? @Frenchy

3. да, но покажите больше кода .. как вы создаете свой текст

Ответ №1:

 File.WriteAllText("Assets/Resources/Recordings/Challenge1.txt", ""); 
 

При использовании File.WriteAllText(string path string text ) убедитесь, что вы включили данные, которые хотите записать в файл. Вы включили только «», который не будет записывать символы в файл.

Чтобы импортировать ресурсы для использования во время выполнения, вы можете использовать Resources.Load(string path) . Это позволит вам получить доступ к файлу в сценариях Unity во время выполнения.

Ответ №2:

Также убедитесь, что вы .закройте файл в конце вашего скрипта, который фактически сохраняет файл, чтобы его можно было открыть позже!

Комментарии:

1. Пожалуйста, добавьте фрагмент кода для тех же и ссылочных ссылок.