我想使用StreamWriter写入文件,但我的问题是我的流无法写入。我已经使用StreamReader成功读取了该文件,但我无法弄清楚如何编写它。以下是我创建流的方式:
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(Login)).Assembly;
Stream stream = assembly.GetManifestResourceStream("BSoft.Resources.LoggedHistory.json");
并且
stream.CanWrite
返回false。 请帮帮我,我使用的是.NETPortable v4.5,我也无法安装System.IO.FileSystem
答案 0 :(得分:0)
在做了一些资源之后,我发现这个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);
}
}
在foreach平台上添加依赖项,这是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包并在每个平台AppDelegate类中调用Forms.Init()。
最后,您可以通过以下方式调用它们来使用此依赖:
DependencyService.Get<ISaveAndLoad>().CheckExistingFile("LoggedHistory.json")