Никогда использовать простую конкатенацию строк для системных путей!
И обратите внимание, что особенно
Application.dataPath + "Resources/TextFiles/textfile.txt"
без какого-либо разделителя не имеет смысла, поскольку это будет файл вне папки
Application.persistentDataPath
, так как это приведет к чему-то вроде
/rootfolder/applicationfolderResources/TextFiles/textfile.txt
Вам нужен либо \
, либо /
между ними, например,
/rootfolder/applicationfolder/Resources/TextFiles/textfile.txt
Поэтому лучше использовать Path.Combine
, который использует правильные разделители пути в соответствии с работающей ОС.
Path.Combine(Application.persistentDataPath, "Resources", "TextFiles", "textfile.txt")
Затем дополнительно специальное примечание относительно Resources
:
Из собственных рекомендаций Unity для Resources
папка
Не используйте!
Существует множество причин, по которым вы все можете найти в ссылка, но самое главное для вашего случая: папка dataPath
и Resources
только для чтения после сборки!
Так что да, вы можете использовать это для загрузки материала, если вы действительно настаиваете, но только с использованием Resources.Load
, а не напрямую через путь к файлу, как вы уже поняли - , но вы не сможете написать В любом случае, перейдите к нему.
Вместо этого используйте Application.persistentDataPath
, например, например
Path.Combine(Application.persistentDataPath, "TextFiles", "textFile.txt")
, чтобы сохранить этот файл на устройстве - видимый для пользователя, хотя вы Возможно, вы захотите использовать какое-то шифрование.
Тогда все еще возможно / вероятно, что папка TextFiles
просто на самом деле еще не существует. Так что создай это. Я также хотел бы от go до File.Open
, что немного более безопасно (например, создать файл, если он не существует и т. Д. c)
private string folderPath => Path.Combine(Application.persistentDataPath, "TextFiles");
private string filePath => Path.Combine(folderPath, "textFile.txt");
public void SaveDataToTextFile()
{
if(!Directory.Exists(folderPath)
{
Directory.CreateDirectory(folderPath);
}
if(File.Exists(filePath))
{
File.Delete(filePath);
}
using(var fs = File.Open(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write))
{
using(war writer = new StreamWriter(fs))
{
writer.Write("Some Text");
}
}
ReadSavedData();
}
И
public void ReadSavedData()
{
if(!File.Exists(filePath)) return;
using(var fs = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using(var reader = new StreamReader(fs))
{
var fileContent = savedData.ReadToEnd();
var lines = fileContent.Split(new char[] { '\n' });
foreach(var line in lines)
{
var savedDataString = line.Split(new char[] { '\n' });
txtField.text = string.Join("\n", savedDataString.Skip(1));
}
}
}
}