C# 是否可以访问Xamarin.Forms中与平台无关的代码中的外部存储?

C# 是否可以访问Xamarin.Forms中与平台无关的代码中的外部存储?,c#,mobile,xamarin.forms,xamarin.android,xamarin.ios,C#,Mobile,Xamarin.forms,Xamarin.android,Xamarin.ios,我主要是为Android开发的,所以我知道可以使用Android.Content.Context.GetExternalFilesDir在Xamarin.Forms中访问Android设备的外部存储 我知道可以使用Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)独立访问内部存储平台,但也可以对外部存储执行相同的操作吗 我知道这个用例可能有一定的局限性,因为iOS无论如何都不允许对文件系统进行任何非越

我主要是为Android开发的,所以我知道可以使用
Android.Content.Context.GetExternalFilesDir
在Xamarin.Forms中访问Android设备的外部存储

我知道可以使用
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
独立访问内部存储平台,但也可以对外部存储执行相同的操作吗

我知道这个用例可能有一定的局限性,因为iOS无论如何都不允许对文件系统进行任何非越狱访问,但是不必在每个平台上实现它就可以写入外部文件系统,这不是很好吗?难道一个人不能直接写入根应用程序文件目录并让操作系统API处理其余的吗?我是新来的,所以不要对这个愚蠢的问题笑太多


非常感谢您的帮助。

表单不提供访问外部存储的api,我们必须在每个特定平台上实现它,请检查Android

在我的Android项目代码中,我使用了“存储”之类的类名,扩展了您在Xamarin.Forms项目中创建的接口,并使用:

public void SaveFile(string fileName)
        {
            string path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
            string filePath = System.IO.Path.Combine(path, fileName);
            if (!System.IO.File.Exists(filePath))
            {
                using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath, true))
                {
                    writer.WriteLine(DateTime.Now.ToString() + ": " + "Example .txt created using Xamarin.");
                }
            }
            else
            {
                System.IO.File.Delete(filePath);
                using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath, true))
                {
                    writer.WriteLine(DateTime.Now.ToString() + ": " + "Example .txt created using Xamarin.");
                }
            }
        }
        /// <summary>
        /// To receive file from Android Phone
        /// </summary>
        public string ReceiveFile(string fileName)
        {
            string path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
            string filePath = System.IO.Path.Combine(path, fileName);
            return filePath;
        }

希望这有帮助

用于Android实施的Xamarin。

// First take storage permission.
// var status = await Permissions.RequestAsync<Permissions.StorageRead>();
// status = await Permissions.RequestAsync<Permissions.StorageWrite>();

var fullPath = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "file_name.txt");
FileInfo fi = new FileInfo(fullPath);

// Writing data to file.

var fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
var sw = new StreamWriter(fsToWrite);
sw.WriteLine("Another line from streamwriter");
sw.Close();
fsToWrite.Close();

// Reading data from file.

var fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
var sr = new StreamReader(fsToRead);
string fileContent = sr.ReadToEnd();
sr.Close();
fsToRead.Close();

System.Console.WriteLine("Data from : ", fileContent);
//首先获取存储权限。
//var status=wait Permissions.RequestAsync();
//status=wait Permissions.RequestAsync();
var fullPath=Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath,“file_name.txt”);
FileInfo fi=新的FileInfo(完整路径);
//将数据写入文件。
var fsToWrite=fi.Open(FileMode.OpenOrCreate、FileAccess.ReadWrite、FileShare.ReadWrite);
var sw=新的StreamWriter(fsToWrite);
sw.WriteLine(“streamwriter的另一行”);
sw.Close();
fsToWrite.Close();
//从文件中读取数据。
var fsToRead=fi.Open(FileMode.OpenOrCreate、FileAccess.ReadWrite、FileShare.ReadWrite);
var sr=新的StreamReader(fsToRead);
字符串fileContent=sr.ReadToEnd();
高级关闭();
fsToRead.Close();
System.Console.WriteLine(“数据来源:”,fileContent);

Forms不提供访问外部存储的api,我们必须在每个特定平台上实现它,请检查。好的,这回答了我的问题,谢谢!请随便把它放在一个答案里,这样我就可以给你信用了。我也很好奇,文档中哪里有这样的说明?我读了那个页面,在任何地方都找不到这一点。谢谢,这可能会对android的实现有所帮助,谢谢!但据我所知,我不能用这个跨平台实现它,正如科尔所说的,对吗?是的,这是正确的,至少现在是这样。据我所知,每个平台的外部存储类型和位置都非常不同,或者至少在有权限的情况下,您必须从每个本机项目访问外部存储。至少在Xamarin.Forms中你可以实现任何东西,我相信它会越来越好,因为这是微软主要的移动跨平台。
// First take storage permission.
// var status = await Permissions.RequestAsync<Permissions.StorageRead>();
// status = await Permissions.RequestAsync<Permissions.StorageWrite>();

var fullPath = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "file_name.txt");
FileInfo fi = new FileInfo(fullPath);

// Writing data to file.

var fsToWrite = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
var sw = new StreamWriter(fsToWrite);
sw.WriteLine("Another line from streamwriter");
sw.Close();
fsToWrite.Close();

// Reading data from file.

var fsToRead = fi.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
var sr = new StreamReader(fsToRead);
string fileContent = sr.ReadToEnd();
sr.Close();
fsToRead.Close();

System.Console.WriteLine("Data from : ", fileContent);