我使用Xamarin Forms作为照片捕捉应用程序并使用James' Media Plugin PCL使用设备相机拍摄照片。
我意识到,对于每张照片,它都会创建一个文件
/storage/emulated/0/Android/data/com.myapp/files/Pictures
(我可以在Pictures文件夹中提供一个子目录和文件名)。我想要做的是在下次启动应用程序时删除所有这些文件。
由于我只专注于Android版本,我设置了一个依赖服务调用来本地删除文件(我认为这是微不足道的)但由于某些原因我根本找不到该文件以编程方式或通过ADB shell。
当我在Windows计算机上插入设备进行USB文件传输时,我可以看到要删除的照片
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操作系统中的实际物理路径,我们可以从ADB Shell列出?
答案 0 :(得分:0)
我想要做的是在下次启动应用时删除所有这些文件。
尝试使用以下代码,它在我身边正常工作:
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();
}
答案 1 :(得分:0)
这是一个假阴性。我通过Windows资源管理器查看文件,出于某种原因,Windows在删除文件后仍然向我显示这些文件。显然,我无法通过ADB Shell或从Android文件管理器中获取这些文件的原因是因为这些文件从未出现过。
Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath
给了我
/storage/emulated/0/Android/data/com.myapp/files/Pictures
与
相同Computer \ Moto G(4)\内部共享存储\ Android \ data \ com.myapp \ files \ Pictures
System.IO.File.Delete(path)和新的Java.IO.File(dir,children [i])。Delete();方法很好。只是窗口选择继续显示空的“鬼”文件。
这个问题显然是在没有回答之前提出的:Programatically deleted files still show up in Windows Explorer