获取嵌入式资源 Xamarin Forms 的完整路径
Get Fullpath of embedded resource Xamarin Forms
我目前在 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;
是的,您可以使用Xamarin.Essentials获取OS的缓存目录,然后将嵌入的资源复制到其中。
例如:
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);
}
我目前在 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;
是的,您可以使用Xamarin.Essentials获取OS的缓存目录,然后将嵌入的资源复制到其中。
例如:
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);
}