2015-05-20 19 views
8

Im phát triển ứng dụng Android bằng nền tảng Xamarin và Im đang cố gắng tạo thư mục trên bộ nhớ cục bộ nhưng tôi không thành công.Không thể tạo thư mục/tệp trong hệ thống tệp của Android với PCLStorage hoặc Xamarin Forms Labs

Trước tiên, tôi đã thử sử dụng không gian tên System.IO thông qua lớp FileManager được tạo bởi Xamarin Forms Labs. Một đoạn của các hàm tôi đã đi qua đường dẫn của "/ 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); 
     } 

Điều này không có tác dụng nên tôi đã chọn sử dụng PCLStorage thư viện để thực hiện thao tác trên nhiều nền tảng. Tôi đã thử mã này.

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

Không hoạt động. Tôi điều hướng đến thư mục gốc của bộ nhớ trong và tôi không thấy thư mục.

Vì vậy, lỗi dường như không xảy ra do các thư viện được sử dụng nhưng có điều gì đó cụ thể đối với Android. Tôi đã đọc và ghi vào bộ nhớ ngoài trong tệp kê khai. Vì vậy, câu hỏi là. Ứng dụng có quyền tạo tệp hoặc thư mục ở cấp cơ sở của thiết bị lưu trữ hay không phải tạo tệp hoặc thư mục ở vị trí cụ thể như trong Android/data/packagename

+0

Cung cấp cho bạn quyền đọc/ghi được đặt trong tệp kê khai, không có lý do nào khiến bạn không thể tạo thư mục hoặc tệp trong đường dẫn sdcard gốc. Bạn đang cung cấp đường dẫn nào cho 'CreateDirectory()'? EG: Bạn đang sử dụng một trong các loại thư mục System.Environment.SpecialFolder? – matthewrdev

+0

Ngoài ra, loại dữ liệu nào là 'isolationStorageFile'? – matthewrdev

+0

@MattR System.IO.IsolatedStorage –

Trả lời

1

Trên Android, thư mục LocalStorage của PCL Storage corresponds to the "My Documents" Special Folder.

Tôi không chắc chắn chính xác đường dẫn bạn đang cố gắng tạo thư mục, nhưng nếu bạn biết đường dẫn và muốn sử dụng Lưu trữ PCL, bạn sẽ có thể sử dụng FileSystem.Current.GetFolderFromPathAsync để nhận PCL Storage IFolder tương ứng với một thư mục hiện có.

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

có hoạt động với bạn không? –

+0

vâng nó làm việc cho tôi. – Iceburg

+0

Cảm ơn bạn đã trả lời Iceburg, tôi thử lại lần nữa và cho bạn biết. Và nếu nó đang làm việc nó không được chọn là câu trả lời? –

Các vấn đề liên quan