另辟新径实现 Blazor/MAUI 本机交互(二)

NativeApi.cs

内部部分类,该类提供了几个与文件操作相关的方法。

set_config(), get_config() 方法:

    private string PrinterNameKey = "PrinterName";     private string printerName = "Unknown";      public Task<string> set_config(string printerName)     {         Preferences.Set(PrinterNameKey, printerName);         return Task.FromResult("ok");     }     public Task<string> get_config()    {        printerName = Preferences.Default.Get(PrinterNameKey, printerName);        return Task.FromResult(printerName);    }    

open_file_dialog() 方法:

   public async Task<string> open_file_dialog()    {        //work in ui thread        var res =        await MainThread.InvokeOnMainThreadAsync(async () =>        {            try            {                var result = await FilePicker.Default.PickAsync(new PickOptions());                if (result == null)                {                    return "";                }                using var stream = await result.OpenReadAsync();                StreamReader reader = new StreamReader(stream);                return Convert.ToBase64String(Encoding.UTF8.GetBytes(reader.ReadToEnd()));            }            catch (Exception e)            {                var err = e.Message;                return err;            }        });        return res;    }    
  • 该方法在 UI 线程上运行,打开文件选择对话框。
  • 使用 FilePicker.Default.PickAsync 方法打开文件选择器。
  • 如果用户没有选择文件,返回空字符串。
  • 如果选择了文件,读取文件内容并将其转换为 Base64 编码的字符串。
  • 如果发生异常,返回异常消息。

save_file(string data, string fileName) 方法:

   public async Task<string> save_file(string data, string fileName)    {        try        {            string targetFile = System.IO.Path.Combine(FileSystem.Current.AppDataDirectory, fileName);             using FileStream outputStream = File.OpenWrite(targetFile);            using StreamWriter streamWriter = new(outputStream);             await streamWriter.WriteAsync(data);            return $"file path:{targetFile.Replace("\","\\")}";        }        catch (Exception e)        {            var err = e.Message;            return err;        }     } 
  • 该方法将给定的数据保存到指定文件名的文件中。
  • 使用 Path.Combine 方法构建目标文件路径,该路径位于应用程序的数据目录中。
  • 使用 File.OpenWrite 方法打开文件流,并使用 StreamWriter 写入数据。
  • 写入完成后,返回文件路径。
  • 如果发生异常,返回异常消息。

这些方法提供了基本的文件操作功能,包括获取配置、打开文件对话框和保存文件

如何在 Preferences 中存储自定义对象?

Maui 基础 - Preferences 存储和检索应用程序的首选项

完整代码

using System.Text; using System.Text.Json;  namespace MauiBridge;  internal partial class NativeApi : object {     private string PrinterNameKey = "PrinterName";     private string printerName = "Unknown";      /// <summary>     /// 从应用程序的首选项中获取打印机名称 (printerName)     /// </summary>     /// <returns></returns>     public Task<string> get_config()     {         printerName = Preferences.Default.Get(PrinterNameKey, printerName);         return Task.FromResult(printerName);     }      /// <summary>     /// 打开文件选择对话框,读取文件内容并将其转换为 Base64 编码的字符串返回     /// </summary>     /// <returns>文件内容 Base64 编码的字符串</returns>     public async Task<string> open_file_dialog()     {         //work in ui thread         var res =         await MainThread.InvokeOnMainThreadAsync(async () =>         {             try             {                 var result = await FilePicker.Default.PickAsync(new PickOptions());                 if (result == null)                 {                     return "";                 }                 using var stream = await result.OpenReadAsync();                 StreamReader reader = new StreamReader(stream);                 return Convert.ToBase64String(Encoding.UTF8.GetBytes(reader.ReadToEnd()));             }             catch (Exception e)             {                 var err = e.Message;                 return err;             }         });         return res;     }      /// <summary>     /// 将给定的数据保存到指定文件名的文件,返回文件路径     /// </summary>     /// <param name="data"></param>     /// <param name="fileName"></param>     /// <returns>文件路径</returns>     public async Task<string> save_file(string data, string fileName)     {         try         {             string targetFile = System.IO.Path.Combine(FileSystem.Current.AppDataDirectory, fileName);              using FileStream outputStream = File.OpenWrite(targetFile);             using StreamWriter streamWriter = new(outputStream);              await streamWriter.WriteAsync(data);             return $"file path:{targetFile.Replace("\", "\\")}";         }         catch (Exception e)         {             var err = e.Message;             return err;         }     }      /// <summary>     /// 存储自定义对象 User, 将自定义对象序列化为 string 类型,然后再存储     /// </summary>     /// <param name="user"></param>     public void SaveUser(User user)     {         string jsonString = JsonSerializer.Serialize(user);         Preferences.Set("user", jsonString);     }      /// <summary>     /// 检索自定义对象 User, 从 Preferences 中检索字符串,然后将其反序列化为自定义对象     /// </summary>     /// <returns></returns>     public User? GetUser()     {         string jsonString = Preferences.Get("user", string.Empty);         if (string.IsNullOrEmpty(jsonString))         {             return null;         }         return JsonSerializer.Deserialize<User>(jsonString);     }  }  /// <summary> /// 在 Preferences 中存储自定义对象, https://www.cnblogs.com/densen2014/p/18710319 /// </summary> public class User {     public string? Name { get; set; }     public int Age { get; set; } }  

发表评论

评论已关闭。

相关文章