【发布时间】:2020-04-25 23:00:18
【问题描述】:
我有一个作为 AppPackage 部署的 UWP 应用,当我尝试读取/保存 LocalState 文件夹中的文件时,我看到了关闭错误。它不会每次都发生,所以我认为文件在某个时候在此过程中被锁定。错误是
目标多字节代码页中不存在 Unicode 字符的映射。
以及引发错误的代码
private const string SETTINGS_FILENAME = "settings.json";
private static readonly StorageFolder _settingsFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
public async static Task<ConfigWrapper> LoadSettings()
{
try
{
StorageFile sf = await _settingsFolder.GetFileAsync(SETTINGS_FILENAME);
if (sf == null) return null;
string content = await FileIO.ReadTextAsync(sf, Windows.Storage.Streams.UnicodeEncoding.Utf8);
return JsonConvert.DeserializeObject<ConfigWrapper>(content);
}
catch (Exception e)
{
DiagnosticsClient.TrackException(e);
return null;
}
}
public async static Task<bool> SaveSettings(ConfigWrapper data)
{
try
{
StorageFile file = await _settingsFolder.CreateFileAsync(SETTINGS_FILENAME, CreationCollisionOption.ReplaceExisting);
string content = JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { });
await FileIO.WriteTextAsync(file, content, Windows.Storage.Streams.UnicodeEncoding.Utf8);
return true;
}
catch (Exception e)
{
DiagnosticsClient.TrackException(e);
return false;
}
}
我确保以 UTF-8 格式保存和读取文件,所以我不确定为什么会出现编码错误。保存/读取时我需要做些什么(例如锁定文件)吗?
【问题讨论】:
-
请找到一种方法以十六进制转储有问题的文本。
-
您想要不可读的文件?这是之前和之后
-
“之前”文件不是 JSON,不是 unicode,不是混乱的 UTF-8,不是十六进制,不是我认识的任何东西。如果您在 Unix 服务器上运行,请执行
file filename以查看它是否可以通过其“魔法”推断出它是什么。 -
之前的文件是json文件,你说它不是什么?