不允许写入流 C#

Writing to stream C# not allowed

我想使用 StreamWriter 写入文件,但我的问题是我的流无法写入。我已经使用 StreamReader 成功读取了该文件,但我不知道如何编写它。这是我创建流的方式:

var assembly = IntrospectionExtensions.GetTypeInfo(typeof(Login)).Assembly;
Stream stream = assembly.GetManifestResourceStream("BSoft.Resources.LoggedHistory.json");

stream.CanWrite

Returns 错误。

我正在使用 .NETPortable v4.5,我也无法安装 System.IO.FileSystem

在做了一些资源之后,我发现这个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 的示例:

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 class.

中添加 xamarin.forms 包和调用 Forms.Init()

最后,您可以像这样调用它们来使用这些依赖项:

DependencyService.Get<ISaveAndLoad>().CheckExistingFile("LoggedHistory.json")