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); }
- 该方法从应用程序的首选项中设置或获取打印机名称 (printerName)。Maui 基础 - Preferences 存储和检索应用程序的首选项
- 使用 Preferences.Default.Get 方法获取存储的打印机名称,如果没有存储,则返回默认值。
- 返回一个包含打印机名称的任务。
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; } }