无法使用PCLStorage或Xamarin Forms Labs在Android文件系统中创建文件夹/文件

时间:2015-05-20 23:12:21

标签: c# android xamarin

我正在使用Xamarin平台开发Android应用程序,我试图在我的本地存储上创建一个文件夹,但我没有成功。

首先,我尝试通过Xamarin Forms Labs创建的FileManager类使用System.IO命名空间。我正在传递" / 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);
        }

这没有用,所以我选择使用PCLStorage库进行跨平台文件操作。我试过这段代码。

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

没有工作。我导航到内部存储的根目录,但我没有看到该文件夹​​。

因此,由于使用的库是Android的特定内容,因此错误似乎并未发生。我已经在清单中读取和写入外部存储。所以问题是。应用是否有权在存储设备的根级创建文件或文件夹,或者是否必须在特定位置创建它,例如在Android / data / packagename中

3 个答案:

答案 0 :(得分:4)

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);
    }

答案 1 :(得分:2)

经过多次尝试后,我用这个

解决了这个问题
        string rootPath = Android.App.Application.Context.GetExternalFilesDir(null).ToString();

        var filePathDir = Path.Combine(rootPath, "Folder");

        if (!File.Exists(filePathDir))
        {
            Directory.CreateDirectory(filePathDir);
        }

创建的文件夹可通过adb @ / sdcard / Android / Data / Folder或类似内容或设备内存@ / Android / data /<< AppName>> / files / Folder

答案 2 :(得分:1)

在Android,PCL Storage的LocalStorage文件夹corresponds to the "My Documents" Special Folder上。

我不确定您正在尝试创建文件夹的路径,但如果您知道路径并想要使用PCL存储,则应该可以使用FileSystem.Current.GetFolderFromPathAsync来获取与现有文件夹对应的PCL存储IFolder