public async static Task<byte[]> ToByteArray(this StorageFile file)
{
byte[] fileBytes = null;
using (IRandomAccessStreamWithContentType stream = await file.OpenReadAsync())
{
fileBytes = new byte[stream.Size];
using (DataReader reader = new DataReader(stream))
{
await reader.LoadAsync((uint)stream.Size);
reader.ReadBytes(fileBytes);
}
}
return fileBytes;
}
这个班..
public class AppFile
{
public string FileName { get; set; }
public byte[] ByteArray { get; set; }
}
而这个变量
List<AppFile> _appFiles = new List<AppFile>();
只是..
var fileOpenPicker = new FileOpenPicker();
IReadOnlyList<StorageFile> files = await fileOpenPicker.PickMultipleFilesAsync();
foreach (var file in files)
{
var byteArray = await file.ToByteArray();
_appFiles.Add(new AppFile { FileName = file.DisplayName, ByteArray = byteArray });
}
UPDATE
using Newtonsoft.Json;
using System.Linq;
using Windows.Security.Credentials;
using Windows.Storage;
namespace Your.Namespace
{
public class StateService
{
public void SaveState<T>(string key, T value)
{
var localSettings = ApplicationData.Current.LocalSettings;
localSettings.Values[key] = JsonConvert.SerializeObject(value);
}
public T LoadState<T>(string key)
{
var localSettings = ApplicationData.Current.LocalSettings;
if (localSettings.Values.ContainsKey(key))
return JsonConvert.DeserializeObject<T>(((string) localSettings.Values[key]));
return default(T);
}
public void RemoveState(string key)
{
var localSettings = ApplicationData.Current.LocalSettings;
if (localSettings.Values.ContainsKey(key))
localSettings.Values.Remove((key));
}
public void Clear()
{
ApplicationData.Current.LocalSettings.Values.Clear();
}
}
}
3 回答
考虑这种方法..
这个班..
而这个变量
只是..
UPDATE
如果您需要访问大量文件,请用户选择父文件夹然后存储它可能是一个更好的解决方案(除非您想要存储来自不同位置的1,000个单独挑选的文件) . 您也可以将
StorageFolder
存储在访问列表中 .我不确定为什么你认为它会让你的应用变慢,但唯一真正的方法来了解这是否会影响你的表现是尝试它并衡量你的目标 .
有点晚了,但是,是的,未来的访问列表将减慢你的应用程序,因为它返回storagfile,storagefolder或storeageitem对象 . 它们通过运行时代理运行,无论主机功能如何,它都会在大约400个对象上遇到巨大的性能障碍