我想在ASSETS文件夹中写入我的HTML文件。
请注意,因为我的HTML与其他文件/文件夹有关,我无法使用个人文件夹。我必须写
资产/ HTML / mycharts.html
[MY WRITING code below return these errors
System.IO.File.WriteAllText("file:///android_asset/myGraphs/BarGraph.html", s);
]
错误
UNHANDLED EXCEPTION: System.IO.DirectoryNotFoundException: Could not find a part of the path "//file:///android_asset/myGraphs/BarGraph.html".
at System.IO.FileStream..ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare,int,bool,System.IO.FileOptions) <0x00208>
at System.IO.FileStream..ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare) <0x00057>
at System.IO.StreamWriter..ctor (string,bool,System.Text.Encoding,int) <0x00087>
at System.IO.StreamWriter..ctor (string,bool,System.Text.Encoding) <0x00037>
at
]
答案 0 :(得分:0)
无法写入资源文件夹或编辑其中的任何文件。它是只读的。
修改强> 正如评论中所建议的那样,最初在您的资产中包含您的HTML,并在需要时将它们保存在SD卡或私人存储中。
要在SD卡上存储文件,您可以像这样获得SD卡的路径:
var folder = Android.OS.Environment.ExternalStorageDirectory + Java.IO.File.Separator + "MyAppFolder";
"MyAppFolder"
可以是您想要的任何内容,只要它不与SD卡上的某些其他文件夹名称冲突,因此请务必检查它是否已存在。将它与文件名结合起来如下:
var extFileName = folder + Java.IO.File.Separator + "MyFile.txt";
现在写一些文件:
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
using (var fs = new FileStream(extFileName, FileMode.OpenOrCreate))
{
var buf = Encoding.ASCII.GetBytes("Hello, world!");
fs.Write(buf, 0, buf.Length);
}
如果要将数据存储在内部存储中,可以使用以下命令获取私有存储的路径:
var folder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
答案 1 :(得分:0)
我使用以下代码完成了上述解决方案:
using (StreamReader sr = new StreamReader( this.contextCalledFrom.Assets.Open("pdfreport.html")))
html = sr.ReadToEnd();
MemoryStream memoryStream = new MemoryStream();
client.convertHtml(html, memoryStream);
var folder = Android.OS.Environment.ExternalStorageDirectory + Java.IO.File.Separator + "wpfolder";
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
var extFileName = folder + Java.IO.File.Separator + "report.pdf";
using (FileStream file = new FileStream(extFileName, FileMode.Create, FileAccess.Write))
{
memoryStream.WriteTo(file);
}