用Delphi 10.3写了个安卓APP,需要进行文件读写操作,即将存储卡上的文本文件读到memo里,修改过后在原目录保存为另一个文件;当文件在内置存储卡时,读取和写入(用的是Memo.Lines.SaveToFile(FilePath) )没有任何问题,但是当文件是在外置存储卡时,读取没有问题,写入的时候会提示“cannot create file “/xxxx(外置SD卡路径)/文件名”permission denied”考虑到是权限问题,于是在工程文件里勾选了读写外部储存的权限,并且在程序运行时让用户点了确认,在安卓系统设置里面可以程序已经获取了储存权限,但仍旧出现上面的提示,难道是只有读,写两项权限不够吗,还是其他什么原因呢?求大神解答,谢谢!

解决方案 »

  1.   

    权限列表里只选了Read External Storage和Write External Storage,获取权限时的的名称为
    TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE;
    TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE;这个不是外置内存卡吗?如果在启动授权时选择了拒绝,会发现连内置存储都读取不了,是什么原因呢?
      

  2.   

    试试TPath的getDocumentPath或getSharedDocumentPat目录h,写入这个。
      

  3.   

    Linux自己创建的目录,需要chmod命令来设置权限,安卓的目录可能跟这有关。
      

  4.   

    感谢楼上回答。我用你说的TPath方法获取到的是程序自身目录和一个documents文件夹,它们都在内置储存卡里,不在外部储存。我想实现的是对整个外置内存卡的读写权限,类似于文件管理器的功能。至于你说的chmod,可以实现某个程序对文件的访问权限吗?在安卓下,用Delphi如何实现呢?
      

  5.   

    你百度一下“linux文件目录权限”,以及root用户权限,其它我就不懂了。
      

  6.   

    我也找了几天,发现DELPHI自身的目录类TPath是没有取外置内存卡的函数的,我重复测试了它的所有函数,发现取不到,这真是蛋疼。
      

  7.   

    找到了JAVA的方法,想过把JAVA类转成Delphi的pas但是失败了,转换过来的东西都编译不了