写入流C#不被允许

时间:2018-05-30 13:57:46

标签: c# stream writing

我想使用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

1 个答案:

答案 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")