【问题标题】:C# Cannot find part of file pathC#找不到文件路径的一部分
【发布时间】:2018-05-19 21:45:08
【问题描述】:

我正在使用 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 文件的正确方法?

【问题讨论】:

标签: c# xamarin xamarin.ios


【解决方案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");

【讨论】:

  • 将构建操作设置为 BundleResource 是我尚未完成的事情,但是这样做并使用 NSBundle.MainBundle.BundlePath 最终只会在我的 DirectoryNotFoundException 中给我一个稍微不同的路径
  • @jarjar27 仔细检查目录(和文件名)的大小写,文件系统区分大小写)
  • 我可以向你保证,这不是问题所在。你能看一下错误报告中给出的路径,看看我是否遗漏了什么?
  • @jarjar27 你不是在 Xamarin Live 上运行它吗?
  • @jarjar27 你也不应该拥有,这可能是因为文件最初没有被标记为BundleResource并且msbuild没有看到变化(?)......但是当对 Xamarin/msbuild 有疑问,手动删除并重试;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多