2015-05-20 8 views
8

Zajmuję się tworzeniem aplikacji na Androida przy użyciu platformy Xamarin i próbuję utworzyć folder w lokalnej pamięci, ale nie udało mi się.Nie można utworzyć folderu/pliku w systemie plików Android za pomocą PCLStorage lub Xamarin Forms Labs

Najpierw próbowałem używać przestrzeni nazw System.IO poprzez klasę FileManager utworzoną przez Xamarin Forms Labs. Fragment funkcji, które przekazałem ścieżce "/ storage/emulated/0 /` ".

 public void CreateDirectory(string path) 
     { 
      this.isolatedStorageFile.CreateDirectory(path); 
     } 

     public Stream OpenFile(string path, FileMode mode, FileAccess access) 
     { 
      return (Stream)this.isolatedStorageFile.OpenFile(path, (System.IO.FileMode)mode, (System.IO.FileAccess)access); 
     } 

To nie działało, więc zdecydowałem się użyć biblioteki PCLStorage do operacji na wielu platformach. Próbowałem tego kodu.

IFolder rootFolder = FileSystem.Current.LocalStorage; 
folder = await rootFolder.CreateFolderAsync("wakesocial", 
       CreationCollisionOption.OpenIfExists); 

Nie działa. Nawigowałem do katalogu głównego pamięci wewnętrznej i nie widziałem folderu.

Błąd nie wydaje się występować z powodu używanych bibliotek, ale specyficznych dla systemu Android. Przeczytałem i zapisałem do pamięci zewnętrznej w manifeście. Pytanie brzmi. Czy aplikacja ma uprawnienia do utworzenia pliku lub folderu na poziomie katalogu głównego urządzenia pamięci masowej lub musi go utworzyć w określonej lokalizacji, na przykład w systemie Android/data/nazwa_pakietu

+0

Zapewnienie uprawnień do odczytu/zapisu określonych w manifeście, nie powinno być żadnego powodu, dla którego nie można utworzyć katalogu lub pliku w ścieżce sdcard root. Jaką ścieżkę podasz 'CreateDirectory()'? EG: Czy używasz jednego z typów folderów System.Environment.SpecialFolder? – matthewrdev

+0

Co to jest typ danych "isolatedStorageFile"? – matthewrdev

+0

@MattR System.IO.IsolatedStorage –

Odpowiedz

1

W systemie Android, folder LocalStorage PCL Storage corresponds to the "My Documents" Special Folder.

Nie jestem do końca pewien, na jaką ścieżkę próbujesz utworzyć folder, ale jeśli znasz ścieżkę i chcesz używać PCL Storage, powinieneś móc użyć FileSystem.Current.GetFolderFromPathAsync, aby uzyskać PCL Storage IFolder odpowiadający istniejący folder.

3
string folderPath = Environment.ExternalStorageDirectory.AbsolutePath; //Android  

    public async Task PCLGenaratePdf(string folderPath) 
    { 
     IFolder rootFolder = await FileSystem.Current.GetFolderFromPathAsync(folderPath); 
     IFolder folder = await rootFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists); 
     IFile file = await folder.CreateFileAsync("file.pdf", CreationCollisionOption.ReplaceExisting); 
    } 
+0

czy to działa dla Ciebie @Iceburg? –

+0

tak działa dla mnie. – Iceburg

+0

Dziękuję za odpowiedź Iceburg, próbuję raz jeszcze i dam ci znać. A jeśli to działa, to nie jest wybrana jako odpowiedź? –

Powiązane problemy