После некоторого ресурса я нашел эту документацию очень полезной.
Так что основная проблема в том, что в .NetPortable вы не можете использовать System.IO.FileSystem, потому что есть много различиймежду iOS, Android и Windows файловыми системами.Поэтому вы должны использовать Dependency Service , создав интерфейс:
...
namespace BSoft
{
public interface ISaveAndLoad
{
void SaveFile(string filename, string text);
bool CheckExistingFile(string filename);
string ReadFile(string filename);
}
}
И добавив зависимости для каждой платформы, вот пример для iOS:
IOS:
...
using System.IO;
using Xamarin.Forms;
using BSoft.iOS;
[assembly: Dependency(typeof(SaveReadFiles_iOS))] /// !! Important
namespace BSoft.iOS
{
public class SaveReadFiles_iOS : ISaveAndLoad
{
public SaveReadFiles_iOS(){}
public void SaveFile(string filename, string text)
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var filePath = Path.Combine(documentsPath, filename);
File.WriteAllText(filePath, text);
}
public bool CheckExistingFile(string filename)
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var filePath = Path.Combine(documentsPath, filename);
return File.Exists(filePath);
}
public string ReadFile(string filename)
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var filePath = Path.Combine(documentsPath, filename);
if(File.Exists(filePath))
return File.ReadAllText(filePath);
return "";
}
}
}
Кроме того, необходимо учитывать и другие факторы, например, добавление пакета xamarin.forms и вызов Forms.Init () в каждом классе AppDelegate платформы.
Наконец, вы можете использовать эти зависимости, вызываяим так:
DependencyService.Get<ISaveAndLoad>().CheckExistingFile("LoggedHistory.json")