C#无法找到文件路径的一部分

时间:2018-05-19 21:45:09

标签: c# xamarin xamarin.ios

我使用Xamarin.IOS创建一个生成pdf文件的应用程序。我想要将几个页面添加到生成的每个文件中。为实现这一目标,我已将名为MyDocs的文件夹添加到我的项目中,并将File.pdf放入其中。我还在MyDocs中添加了一个名为FileGet的类,它有一个名为GetFile的静态方法,它将一个流返回给File.pdf。

GetFile的实现方式如下:

using System.IO;
...

return new FileStream(Path.Combine("MyDocs", "File.pdf"), FileMode.Open, FileAccess.Read);

我按这样调用方法:

using MyApp.MyDocs;
using System.IO;
/*
code to generate the user's pdf document
*/

FileStream stream = FileGet.GetFile();

/*
code to append documents
*/

但是得到了

System.IO.DirectoryNotFound: Could not find a part of the path "/private/var/containers/Bundle/Application/1B01EF3D-CA49-47F9-9CBB-30EE10AEE6A1/MyApp.app/MyDocs/File.pdf".

在我的MyDocs文件夹中访问File.pdf的正确方法是什么? 或者这不是在应用程序中存储pdf文件的正确方法吗?

1 个答案:

答案 0 :(得分:1)

首先确保您的文件具有 BundleResource

构建操作
|- MyDocs
|   |- SomeBundledFile.png (Build Action = BundleResource)

因此,假设您的Xamarin.iOS项目中的文件属于上述结构,您可以使用NSBundle.MainBundle.BundlePath获取根路径,然后添加其余部分:

var path = Path.Combine(NSBundle.MainBundle.BundlePath, "MyDocs", "SomeBundledFile.png");
using (var stream = new FileStream(path, FileMode.Open))
{
    Console.WriteLine(stream.Length);
}

还有一些类具有静态初始化程序,它们考虑了捆绑资源:

var image = UIImage.FromBundle("MyDocs/SomeBundleFile.png");