NativeApi.cs
内部部分类,该类提供了几个与文件操作相关的方法。
get_config() 方法:
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 存储和检索应用程序的首选项
完整代码
// **********************************
// Densen Informatica 中讯科技
// 作者:Alex Chow
// e-mail:zhouchuanglin@gmail.com
// **********************************
using System.Text;
using System.Text.Json;
namespace test1;
internal partial class NativeApi : object
{
/// <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; }
}