windows 10 - Aplicaciones UWP que acceden a los archivos desde una ubicación aleatoria en el sistema
windows-10 file-access (3)
Si necesita acceder a muchos archivos, pedirle al usuario que seleccione la carpeta principal y luego almacenar esa es probablemente una mejor solución (a menos que desee almacenar 1,000 archivos seleccionados individualmente de diferentes lugares). También puede almacenar StorageFolder
en la lista de acceso.
No estoy seguro de por qué crees que hará que tu aplicación sea lenta, pero la única forma real de saber si esto afectará tu rendimiento es intentarlo y medir tus objetivos.
en UWP hay restricciones de permisos y archivos, por lo que solo podemos acceder a los archivos directamente desde algunas carpetas o podemos usar el selector de archivos para acceder desde cualquier lugar del sistema. ¿cómo puedo usar los archivos seleccionados de filepicker y usarlos en cualquier momento cuando se ejecuta la aplicación? intenté usarlos de nuevo por ruta pero da error de permiso. Conozco la "futureacceslist" pero su límite es de 1000 y también hará que la aplicación sea lenta si no estoy equivocado. . Hay una mejor manera de hacer esto ? o podemos almacenar enlaces de archivos de almacenamiento de alguna manera en la base de datos sqlite local?
Teniendo en cuenta este método ...
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;
}
Esta clase..
public class AppFile
{
public string FileName { get; set; }
public byte[] ByteArray { get; set; }
}
Y esta variable
List<AppFile> _appFiles = new List<AppFile>();
Sólo..
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 });
}
ACTUALIZAR
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();
}
}
}
Un poco tarde, pero, sí, la lista de acceso futura ralentizará su aplicación, ya que devuelve los objetos storagfile, storagefolder o storeageitem. Se ejecutan a través del intermediario de tiempo de ejecución, que alcanza una enorme barrera de rendimiento en aproximadamente 400 objetos, independientemente de la capacidad del host.