You need to enable JavaScript to run this app. Xamarin项目中如何获取指定文件夹及文件夹内的所有对象
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin项目中如何获取指定文件夹及文件夹内的所有对象

Xamarin项目自定义文件夹及内容访问实现方案

核心实现前提

所有运行时对项目内文件夹的访问,都依赖文件对应的**生成操作(Build Action)**配置:如果仅在项目目录下手动新建文件夹、放入文件但不修改生成操作,文件不会被打包进最终安装包,运行时完全无法检索到相关内容。

具体实现方式

1. 跨平台通用的内嵌资源方案

这套方案不需要编写平台特定代码,适配Xamarin.Android、Xamarin.iOS、UWP全平台:

  • 在Xamarin.Forms核心共享项目中新建CuteAnimals文件夹,放入需要访问的图片资源
  • 选中文件夹下所有资源文件,将生成操作设置为EmbeddedResource
  • 可通过如下代码直接枚举指定文件夹下的所有资源:
    // 获取当前核心项目的程序集对象
    var coreAssembly = typeof(App).Assembly;
    // 读取程序集内所有内嵌资源的完整标识路径
    var allResourceIdentifiers = coreAssembly.GetManifestResourceNames();
    // 筛选出CuteAnimals文件夹下的资源(内嵌资源路径默认规则为:项目命名空间.文件夹层级.文件名)
    var cuteAnimalResourceList = allResourceIdentifiers
        .Where(resourcePath => resourcePath.Contains($"{coreAssembly.GetName().Name}.CuteAnimals."))
        .ToList();
    

注意:内嵌资源会被直接打包到核心项目的DLL内部,不存在实体的文件夹文件路径,通过资源名称的路径前缀即可实现等效的文件夹层级检索效果。

2. 平台原生资源目录方案

如果需要直接在设备文件系统层面访问真实的文件夹路径,可将CuteAnimals文件夹放置在各平台指定的资源目录下:

  • 对Android平台:将文件夹放入项目的Assets目录,文件生成操作设置为AndroidAsset,枚举代码为:
    var assetManager = Android.App.Application.Context.Assets;
    var animalFileList = assetManager.List("CuteAnimals");
    
  • 对iOS平台:将文件夹放入项目的Resources目录,文件生成操作设置为BundleResource,枚举代码为:
    var rootBundlePath = NSBundle.MainBundle.BundlePath;
    var targetFolderPath = Path.Combine(rootBundlePath, "CuteAnimals");
    var animalFileList = Directory.GetFiles(targetFolderPath);
    

常见踩坑点

  • 不要使用默认生成操作None的文件做运行时访问:这类文件仅存在于开发机的源代码目录中,不会被打包到APP安装包内,必然出现检索失败的问题。
  • Android平台的Asset目录枚举不支持自动递归遍历,如果CuteAnimals下存在嵌套子文件夹,需要手动逐层调用List方法获取所有层级的文件。
  • 如果是做本地图集、批量图片加载类功能,优先选择内嵌资源方案,可大幅减少跨平台适配的代码量。

内容的提问来源于stack exchange,提问作者padalchik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 05:36:03