[英]Can't access file in Android External Storage
我將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
看到要刪除的Computer\\Moto G (4)\\Internal shared storage\\Android\\data\\com.myapp\\files\\Pictures
但是我無法通過代碼或外殼程序訪問這些文件。 在代碼中,我正在通過
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
可以從ADB Shell中列出的Android OS的實際物理路徑轉換為?
我要做的是下次我的應用啟動時刪除所有這些文件。
嘗試使用以下代碼,它對我而言效果很好:
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資源管理器查看文件,由於某種原因,即使刪除了文件,Windows仍向我顯示這些文件。 顯然,我無法通過ADB Shell或從Android File Manager中獲取這些文件的原因是因為這些文件從不存在。
Forms.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryPictures).AbsolutePath
給我
/storage/emulated/0/Android/data/com.myapp/files/Pictures
這與
計算機\\ Moto G(4)\\內部共享存儲\\ Android \\ data \\ com.myapp \\ files \\ Pictures
System.IO.File.Delete(path)和新的Java.IO.File(dir,children [i])。Delete(); 方法工作正常。 只是Windows選擇繼續顯示空的“ ghost”文件。
以前曾出現過此問題,但沒有答案:以編程方式刪除的文件仍顯示在Windows資源管理器中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.