Запись в поток C # не разрешена - PullRequest
0 голосов
/ 30 мая 2018

Я хочу записать в файл с помощью 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 голосов
/ 30 мая 2018

После некоторого ресурса я нашел эту документацию очень полезной.

Так что основная проблема в том, что в .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")
...