【问题标题】:Get Fullpath of embedded resource Xamarin Forms获取嵌入式资源 Xamarin Forms 的完整路径
【发布时间】:2021-02-18 14:05:53
【问题描述】:

我目前在 xamarin 表单中使用 FilePicker 来选择一个 zip 文件,然后我从中获取完整路径并在 Xamarin.Android 项目中使用此完整路径。使用以下代码:

            var result = await FilePicker.PickAsync(new PickOptions
            {

                PickerTitle = "Select zip file"
            });

            if (result != null)
            {
                FileNameLabel.Text = $"{result.FileName}";
                if (!result.FileName.EndsWith("zip", StringComparison.OrdinalIgnoreCase))
                {
                    await DisplayAlert("Wrong File", "Selected file is not right", "Ok");
                }
                else
                {
                    var stream = result.OpenReadAsync();
                    _filepath = result.FullPath;
                }

            }

我想做同样的事情,但没有 FilePicker,而是将我的 zip 文件添加为嵌入式资源。 我知道我可以使用以下代码访问嵌入式资源,但我无法获得 FullPath

        var assembly = IntrospectionExtensions.GetTypeInfo(typeof(App)).Assembly;
        Stream stream = assembly.GetManifestResourceStream("TestFile.json");

是否可以这样做:

         File file = new File(assembly.GetManifestResourceStream("TestFile.Zip"));
        _fullname = file.FullName;

【问题讨论】:

  • 嵌入的资源不是文件,也没有文件路径
  • 那么将嵌入式资源移动到缓存并尝试获取Fullpath是否合乎逻辑?

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

是的,您可以使用 Xamarin.Essentials 获取操作系统的缓存目录,然后将嵌入的资源复制到该目录。

例如:

var cacheFile = Path.Combine(FileSystem.CacheDirectory, "your file");
if (File.Exists(cacheFile))
    File.Delete(cacheFile);
using (var resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("your embedded resource"))
using (var file = new FileStream(cacheFile, FileMode.Create, FileAccess.Write))
 {
   resource.CopyTo(file);
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2020-08-03
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多