在做了一些调查之后,我发现了这个
documentation
非常有用。
因此,主要问题是在.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的一个示例:
网间网操作系统:
...
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 "";
}
}
}
此外,还有更多因素需要考虑,比如在每个平台appdelegate类中添加xamarin.forms包并调用forms.init()。
最后,您可以这样调用这些依赖项:
DependencyService.Get<ISaveAndLoad>().CheckExistingFile("LoggedHistory.json")