none
storagefile拷贝文件失败 RRS feed

  • 问题

  • 使用fileopenpicker选择文件,然后将stoagefile拷贝到Package.Current.InstalledLocation时,失败,提示拒绝访问。请问怎么解决
    2013年6月29日 12:48

答案

  • 应用的安装目录在运行的时候是不允许往里面存放文件的,推荐存放到AppData目录下,或者其他地方。

    2013年7月2日 8:36
  • hi,skczjun

    你还没理解微软应用的权限分配机制

    对于Package.Current.InstalledLocation文件夹下的文件是不允许覆盖的,即使应用本身的操作也不可以覆盖此文件夹下的文件。微软这样做的目的是为了防止安装的应用被用户本地修改,以便保证应用的完整性。

    虽然此文件夹下的文件没有覆盖的权限但有非覆盖的粘贴权限。

    那该如何做呢?如下代码:

    StorageFolder insatllFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
    
                    StorageFile storageFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(fileName);
    
                    await storageFile.CopyAsync(insatllFolder, "test.dat", NameCollisionOption.GenerateUniqueName);

    也就是说如果Package.Current.InstalledLocation如果有text.dat文件你不能覆盖,只能是使用NameCollisionOption.GenerateUniqueName这个属性对拷贝进来的文件会自动加序命名,test(1).dat、test(2).dat。。。

    希望对你有帮助

    2013年7月3日 8:41

全部回复

  • Hi skczjun,

    您能确定下被选择的文件有足够的权限被拷贝,同时不被其他程序占用么?


    James He
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年7月1日 9:03
    版主
  • 应用的安装目录在运行的时候是不允许往里面存放文件的,推荐存放到AppData目录下,或者其他地方。

    2013年7月2日 8:36
  • hi,skczjun

    你还没理解微软应用的权限分配机制

    对于Package.Current.InstalledLocation文件夹下的文件是不允许覆盖的,即使应用本身的操作也不可以覆盖此文件夹下的文件。微软这样做的目的是为了防止安装的应用被用户本地修改,以便保证应用的完整性。

    虽然此文件夹下的文件没有覆盖的权限但有非覆盖的粘贴权限。

    那该如何做呢?如下代码:

    StorageFolder insatllFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
    
                    StorageFile storageFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(fileName);
    
                    await storageFile.CopyAsync(insatllFolder, "test.dat", NameCollisionOption.GenerateUniqueName);

    也就是说如果Package.Current.InstalledLocation如果有text.dat文件你不能覆盖,只能是使用NameCollisionOption.GenerateUniqueName这个属性对拷贝进来的文件会自动加序命名,test(1).dat、test(2).dat。。。

    希望对你有帮助

    2013年7月3日 8:41
  • 一般是在用户的文件夹中,才能访问,即 ”库\文档“。

    在工程中要设置属性”允许访问的数据目录“。

    2013年7月8日 6:06