save file to default folder in maui
在maui上保存文件到默认文件夹的功能
Save a text file
保存文本文件
var res = MKFileSaver.Save((int)SaveFolderType.Video, "Test/Mytext.txt");
using var stream = MKFileSaver.Open(res.PlatformPath, "w");
using var sw = new StreamWriter(stream);
sw.Write("测试文字");
In android,it will save in storage/emulate/0/download/Test/Mytext.txt
In windows,it will save in c:user/*/document/Test/MyText.txt
if you targets android api29 lower,you need declare android.permission.READ_EXTERNAL_STORAGE and android.permission.WRITE_EXTERNAL_STORAGE
如果安卓目标在api29以下,需要声明读写外部存储权限
if you grant android.permission.MANAGE_EXTERNAL_STORAGE or under android api29 or windows,you can use fileApi or input directPath
如果安卓有管理所有文件权限或者在android api29以下或者windows,可以使用fileapi或者给直接路径
using var stream = MKFileSaver.Open(res.FullPath, "w");
using var stream = File.OpenWrite(res.FullPath, "w");
if you app running on android api 29 higher,you can only save a mp4(or other video format) file to saveFolderType.Video or saveFodlerType.Other, otherwise,it will throw an exception.it's same for audio and images
在安卓11以上,只能在视频类型里或洽谈类型里存视频文件,否则抛出异常,音频和图像同理
change default folder:
更改默认文件夹:
public class FolderProvider : DefaultFolderProvider
{
protected override string GetDefaultFolder(DevicePlatform platform, int folderType)
{
SaveFolderType saveFolderType;
try
{
saveFolderType = (SaveFolderType)folderType;
}
catch
{
saveFolderType = SaveFolderType.Other;
}
if (platform == DevicePlatform.Android)
{
return saveFolderType switch
{
SaveFolderType.Video =>AndroidVideoDCIMPath,
SaveFolderType.Audio => AndroidAudioMusicPath,
SaveFolderType.Image => AndroidImagePicturesPath,
_ => AndroidOtherDownloadPath,
};
}
else
{
return saveFolderType switch
{
SaveFolderType.Video => Environment.GetFolderPath(Environment.SpecialFolder.MyVideos),
SaveFolderType.Audio => Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
SaveFolderType.Image => Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
_ => Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
};
}
}
}
MKFileSaver.Default.DefaultFolderProvider = new FolderProvider();
In windows,you need return an absloute path,no restrict
In Android api 29 higher,you can only return path define in defaultFolderProvider starts with AndroidImage**** for iamge file type,same as audio,video
In android api 29 lower,you can return path relative to storage/emulate/0 ,no restrict
windows上,你可以返回任意绝对路径 android api 29以下,可以返回任意相对于storage/emulate/0的路径, android api 29以上,只能返回defaultFolderProvider里定义的路径,如图像只能返回DefaultFolderProvider.AndroidImagexxxx,视频音频同理