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

时间:2015-09-21 10:17:23

标签: windows-10 uwp file-access filepicker

在UWP中有文件和权限限制,因此我们只能从几个文件夹直接访问文件,或者我们可以使用filepicker从系统上的任何位置访问。 我如何使用从filepicker中挑选的文件,并在应用程序运行时再次使用它们?试图通过路径再次使用它们,但它给出了权限错误。我知道" futureacceslist"但它的限制是1000,如果我没有错,它会使应用程序变慢? 。 有一个更好的方法吗 ?或者我们可以在本地sqlite数据库中以某种方式存储存储文件链接吗?

3 个答案:

答案 0 :(得分:5)

如果您需要访问大量文件,请用户选择父文件夹然后存储它可能是一个更好的解决方案(除非您想要存储来自不同位置的1,000个单独挑选的文件)。您也可以将StorageFolder存储在访问列表中。

我不确定为什么你认为它会让你的应用变慢,但唯一可以知道这是否会影响你的表现的方法就是尝试并衡量你的目标。

答案 1 :(得分:2)

考虑这种方法..

g

这堂课..

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

答案 2 :(得分:1)

有点晚了,但是,是的,未来的访问列表会减慢你的应用程序,因为它会返回storagfile,storagefolder或storeageitem对象。它们通过运行时代理运行,无论主机功能如何,它都会在大约400个对象上遇到巨大的性能障碍