写入ASSETS文件夹

时间:2012-10-29 07:22:41

标签: c# xamarin.android monodevelop

我想在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


]

2 个答案:

答案 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);
           }