Android 在';cp';和';chmod';

Android 在';cp';和';chmod';,android,xamarin.android,Android,Xamarin.android,fromFile-sudo权限文件 toFile-应用程序文件夹中的文件(应用程序可以从此目录读取) 复制文件时,我还设置了规则666 Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cp", fromFile.AbsolutePath , toFile.AbsolutePath }); Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "c

fromFile
-sudo权限文件
toFile
-应用程序文件夹中的文件(应用程序可以从此目录读取)

复制文件时,我还设置了规则
666

Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "cp", fromFile.AbsolutePath , toFile.AbsolutePath });
Java.Lang.Runtime.GetRuntime().Exec(new string[] { "su", "-c", "chmod", "666", toFile.AbsolutePath });
using (FileInputStream fr = new FileInputStream(toFile))
{
  ...
}
我在
FileInputStream
中遇到异常:

/dir1/dir2/file.bla:打开失败:EACCES(权限被拒绝)

PS:完成这些步骤后,我正在filemanager中查找文件
toFile
的权限。他们是666

PS2:如果这些操作是使用公共目录中的文件执行的,则没有错误

PS3:设备根目录

我的舱单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="byInterv.SilenceClient" android:versionCode="1" android:versionName="1.5" android:installLocation="internalOnly">
    <uses-sdk android:minSdkVersion="19" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_FRAME_BUFFER" />
    <application android:label="Android Silence" android:hardwareAccelerated="true" android:icon="@drawable/Icon"></application>
    <receiver android:name=".GCMBootReceiver" android:enabled="true" android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>
</manifest>

PS5:
如果我从su看文件permissin,然后是666,如果从应用程序(Java.IO.file.Can***())看文件permissin,那么全部为false…:((

您是否在清单中提供了存储访问权限,否则提供此权限

   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


如果您在安卓m上工作,您必须在rum时间内设置权限。

如果能够使用提取的数据问题文件创建文件,则可以读取目标文件

未读文件
-问题文件

fullTempName
-解锁文件

using (Java.Lang.Process p = Java.Lang.Runtime.GetRuntime().Exec("su")) {
using (DataOutputStream os = new DataOutputStream(p.OutputStream))
{
  os.WriteBytes("cat \"" + unreadFile + "\"\n");
  os.Flush();
  os.Close();
  using (DataInputStream ins = new DataInputStream(p.InputStream))
  {
    byte[] buff = new byte[4096];
    int count = ins.Read(buff, 0, 4096);
    using (System.IO.FileStream fs = System.IO.File.OpenWrite(fullTempName))
    {
      while (count > 0)
      {
        fs.Write(buff, 0, count);
        count = ins.Read(buff, 0, 4096);
      }
      fs.Close();
    }
  }
}

如果有其他方法,请告知。谢谢你已经在我的项目中获得android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGEaccess,否则将不会复制文件,也不会安装权限。你使用的是哪一个android版本?6.0(手机阿尔卡特5045d)如果您在6.中工作,请转到设置->应用->应用名称->权限->存储,并确保其已启用。