无法访问 Android 外部存储中的文件
Can't access file in Android External Storage
我将 Xamarin Forms 用于照片捕捉应用程序,并使用 James 的 Media Plugin PCL 使用设备相机捕捉照片。
我意识到,对于每张照片,它都会创建一个文件
/storage/emulated/0/Android/data/com.myapp/files/Pictures
(我可以提供图片文件夹中的子目录和文件名)。我想要做的是在我的应用程序下次启动时删除所有这些文件。
因为我只关注 Android 版本,所以我设置了一个依赖服务调用来本地删除文件(我认为这是微不足道的)但由于某些原因我根本找不到该文件以编程方式或通过 ADB shell。
当我在 windows 电脑上插入设备进行 USB 文件传输时,我可以在 windows 中看到我想要删除的照片
Computer\Moto G (4)\Internal shared storage\Android\data\com.myapp\files\Pictures
但我无法通过代码或 shell 获取这些文件。在代码中,我正在通过
Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath
这给了我路径
/storage/emulated/0/Android/data/com.myapp/files/Pictures
我认为这是我的文件应该所在的路径。但它是空白的。无论我尝试 System.IO
还是 Java.IO
,目录都是空的,file.delete()
或 System.IO.File.Delete(path)
对我不起作用。
tldr;
是什么意思
Computer\Moto G (4)\Internal shared storage\Android\data\com.myapp\files\Pictures
转换为 Android OS 中的实际物理路径,我们可以从 ADB Shell?
中列出
What I want to do is delete all these files the next time my app starts up.
尝试使用以下代码,它在我这边运行良好:
public void DeleteFolder()
{
var path = Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath;
Java.IO.File directory = new Java.IO.File(path);
if (directory.IsDirectory)
{
foreach (Java.IO.File child in directory.ListFiles())
{
deleteRecursive(child);
}
}
directory.Delete();
}
这是一个假阴性。我正在通过 Windows Explorer 查看这些文件,出于某种原因,Windows 即使在它们被删除后仍继续向我显示这些文件。显然,我无法通过 ADB Shell 或从 Android 文件管理器中获取这些文件的原因是因为这些文件根本不存在。
Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).绝对路径
给我
/storage/emulated/0/Android/data/com.myapp/files/Pictures
与
相同
Computer\MotoG(4)\内部共享storage\Android\data\com.myapp\files\Pictures
System.IO.File.Delete(path) 和 new Java.IO.File(dir, children[i]).Delete();方法工作正常。只是 windows 选择继续显示空的 "ghost" 文件。
这个问题显然已经被提出来没有答案:Programatically deleted files still show up in Windows Explorer
我将 Xamarin Forms 用于照片捕捉应用程序,并使用 James 的 Media Plugin PCL 使用设备相机捕捉照片。
我意识到,对于每张照片,它都会创建一个文件
/storage/emulated/0/Android/data/com.myapp/files/Pictures
(我可以提供图片文件夹中的子目录和文件名)。我想要做的是在我的应用程序下次启动时删除所有这些文件。
因为我只关注 Android 版本,所以我设置了一个依赖服务调用来本地删除文件(我认为这是微不足道的)但由于某些原因我根本找不到该文件以编程方式或通过 ADB shell。
当我在 windows 电脑上插入设备进行 USB 文件传输时,我可以在 windows 中看到我想要删除的照片
Computer\Moto G (4)\Internal shared storage\Android\data\com.myapp\files\Pictures
但我无法通过代码或 shell 获取这些文件。在代码中,我正在通过
Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath
这给了我路径
/storage/emulated/0/Android/data/com.myapp/files/Pictures
我认为这是我的文件应该所在的路径。但它是空白的。无论我尝试 System.IO
还是 Java.IO
,目录都是空的,file.delete()
或 System.IO.File.Delete(path)
对我不起作用。
tldr;
是什么意思Computer\Moto G (4)\Internal shared storage\Android\data\com.myapp\files\Pictures
转换为 Android OS 中的实际物理路径,我们可以从 ADB Shell?
中列出What I want to do is delete all these files the next time my app starts up.
尝试使用以下代码,它在我这边运行良好:
public void DeleteFolder()
{
var path = Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath;
Java.IO.File directory = new Java.IO.File(path);
if (directory.IsDirectory)
{
foreach (Java.IO.File child in directory.ListFiles())
{
deleteRecursive(child);
}
}
directory.Delete();
}
这是一个假阴性。我正在通过 Windows Explorer 查看这些文件,出于某种原因,Windows 即使在它们被删除后仍继续向我显示这些文件。显然,我无法通过 ADB Shell 或从 Android 文件管理器中获取这些文件的原因是因为这些文件根本不存在。
Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).绝对路径
给我
/storage/emulated/0/Android/data/com.myapp/files/Pictures
与
相同Computer\MotoG(4)\内部共享storage\Android\data\com.myapp\files\Pictures
System.IO.File.Delete(path) 和 new Java.IO.File(dir, children[i]).Delete();方法工作正常。只是 windows 选择继续显示空的 "ghost" 文件。
这个问题显然已经被提出来没有答案:Programatically deleted files still show up in Windows Explorer