首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android上获得MauiAsset的路径

如何在android上获得MauiAsset的路径
EN

Stack Overflow用户
提问于 2022-10-03 13:56:12
回答 2查看 289关注 0票数 0

我希望在我的.net毛伊岛应用程序获得一个文件的路径。我已经将文件'Build‘设置为MauiAsset,并将’复制到输出目录‘设置为复制(如果更新)。

部署到Windows时,我可以通过以下方法成功获得路径:

代码语言:javascript
复制
string fileName = $"{AppDomain.CurrentDomain.BaseDirectory}MyFolder\\myfile.txt"; 

它解析为:"C:\Users\xxx\source\repos\myproject\myproject\bin\Debug\net6.0-windows10.0.19041.0\win10-x64\AppX\MyFolder\myfile.txt“

在android上尝试使用:

代码语言:javascript
复制
string fileName = $"{AppDomain.CurrentDomain.BaseDirectory}/MyFolder/myfile.txt";

它解析为:"/data/user/0/com.companyname.myproject/files/MyFolder/myfile.txt“

这显然不是android上可用的路径,因为应用程序随后抛出。

'/data/user/0/com.companyname.myproject/files/MyFolder/myfile.txt'.‘

System.IO.DirectoryNotFoundException:“无法找到路径的一部分

当我试图使用

代码语言:javascript
复制
System.IO.File.ReadAllLines(fileName);

看起来路径的起点也缺失了,但是我如何得到它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-03 14:08:13

溶液

解决方案:所以我终于找到了解决这个问题的办法。我尝试将MauiAsset添加到项目文件(myproject.csproj)中,其确切路径如下:

代码语言:javascript
复制
<ItemGroup>
<MauiAsset Include="MyFolder\myfile.txt" />
</ItemGroup>

不管你怎么扭动和转动它都不起作用。我唯一能做的就是复制微软的递归文件夹,包括:

代码语言:javascript
复制
<MauiAsset Include="MyFolder\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />

然后在c#中,将位于MyFolder内部的文件文件设置为

代码语言:javascript
复制
string filePath = "myfile.txt"

继续到有关阅读的详细信息的更新部分。

更新

在浏览文件系统API之后,如下图所示:https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/storage/file-system-helpers?tabs=android

我认为你需要使用OpenAppPackageFileAsync

如下所示:

代码语言:javascript
复制
   public async Task<string> ReadTextFile(string filePath)
   {
      using Stream fileStream = await FileSystem.Current.OpenAppPackageFileAsync(filePath);
      using StreamReader reader = new StreamReader(fileStream);
      return await reader.ReadToEndAsync();
   }

OG回答

我在使用Xamarin时学到的一个经验也适用于Maui(可能)。处理路径交叉平台是烦人的地狱,一个不正确的举动,你注定会发现你做错了什么。为了避免这些错误,我喜欢做的是让C#基于目标平台处理如何为我的文件获得正确的路径(不是100%万无一失,但绝对更容易)。

使用Path.Combine获取路径,以避免使用不同"/“类型括号的不同操作系统出现问题:

就你而言,你所做的就是:

代码语言:javascript
复制
var fullPath = System.IO.Path.Comnbine(FileSystem.AppDataDirectory,"MyFolder","myfile.txt");
票数 1
EN

Stack Overflow用户

发布于 2022-10-04 07:36:32

所以我终于找到了解决这个问题的办法。我尝试将MauiAsset添加到项目文件(myproject.csproj)中,其确切路径如下:

代码语言:javascript
复制
<ItemGroup>
<MauiAsset Include="MyFolder\myfile.txt" />
</ItemGroup>

不管你怎么扭动和转动它都不起作用。我唯一能做的就是复制微软的递归文件夹,包括:

代码语言:javascript
复制
<MauiAsset Include="MyFolder\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />

然后在C#中,将位于MyFolder内部的文件文件设置为

代码语言:javascript
复制
string filePath = "myfile.txt"

然后,FreakyAli's answer用于从文件中读取。

另外,当您设置一个文件的构建操作时,它实际上应该自动添加到csproj文件中,而它目前没有这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73936525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档