加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-10 – UWP应用程序从系统上的随机位置访问文件

发布时间:2020-12-14 02:06:08 所属栏目:Windows 来源:网络整理
导读:在UWP中有文件和权限限制,因此我们只能直接从几个文件夹访问文件,或者我们可以使用filepicker从系统上的任何位置访问. 我如何使用从filepicker中挑选的文件,并在应用程序运行时再次使用它们?试图通过路径再次使用它们,但它给出了权限错误.我知道“futureacc
在UWP中有文件和权限限制,因此我们只能直接从几个文件夹访问文件,或者我们可以使用filepicker从系统上的任何位置访问.
我如何使用从filepicker中挑选的文件,并在应用程序运行时再次使用它们?试图通过路径再次使用它们,但它给出了权限错误.我知道“futureacceslist”但它的限制是1000,如果我没有错,它会让应用程序变慢吗? .
有一个更好的方法吗 ?或者我们可以在本地sqlite数据库中以某种方式存储存储文件链接?

解决方法

考虑这种方法..

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();
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读