不允许写入流 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")
我想使用 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")