我希望在我的.net毛伊岛应用程序获得一个文件的路径。我已经将文件'Build‘设置为MauiAsset,并将’复制到输出目录‘设置为复制(如果更新)。
部署到Windows时,我可以通过以下方法成功获得路径:
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上尝试使用:
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:“无法找到路径的一部分
当我试图使用
System.IO.File.ReadAllLines(fileName);看起来路径的起点也缺失了,但是我如何得到它呢?
发布于 2022-10-03 14:08:13
溶液
解决方案:所以我终于找到了解决这个问题的办法。我尝试将MauiAsset添加到项目文件(myproject.csproj)中,其确切路径如下:
<ItemGroup>
<MauiAsset Include="MyFolder\myfile.txt" />
</ItemGroup>不管你怎么扭动和转动它都不起作用。我唯一能做的就是复制微软的递归文件夹,包括:
<MauiAsset Include="MyFolder\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />然后在c#中,将位于MyFolder内部的文件文件设置为
string filePath = "myfile.txt"继续到有关阅读的详细信息的更新部分。
更新
在浏览文件系统API之后,如下图所示:https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/storage/file-system-helpers?tabs=android
我认为你需要使用OpenAppPackageFileAsync
如下所示:
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获取路径,以避免使用不同"/“类型括号的不同操作系统出现问题:
就你而言,你所做的就是:
var fullPath = System.IO.Path.Comnbine(FileSystem.AppDataDirectory,"MyFolder","myfile.txt");发布于 2022-10-04 07:36:32
所以我终于找到了解决这个问题的办法。我尝试将MauiAsset添加到项目文件(myproject.csproj)中,其确切路径如下:
<ItemGroup>
<MauiAsset Include="MyFolder\myfile.txt" />
</ItemGroup>不管你怎么扭动和转动它都不起作用。我唯一能做的就是复制微软的递归文件夹,包括:
<MauiAsset Include="MyFolder\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />然后在C#中,将位于MyFolder内部的文件文件设置为
string filePath = "myfile.txt"然后,FreakyAli's answer用于从文件中读取。
另外,当您设置一个文件的构建操作时,它实际上应该自动添加到csproj文件中,而它目前没有这样做。
https://stackoverflow.com/questions/73936525
复制相似问题