Можно ли получить доступ к внешнему хранилищу в независимом от платформы коде в Xamarin.Forms? - PullRequest
2 голосов
/ 07 января 2020

Я в основном разрабатываю для Android, поэтому я знаю, что можно получить доступ к внешнему хранилищу устройства Android в Xamarin.Forms, используя Android.Content.Context.GetExternalFilesDir.

Я знаю, что можно получить доступ к платформе внутреннего хранилища независимо с помощью Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), но возможно ли сделать то же самое для внешнего хранилища?

Я знаю, что сценарий использования может быть довольно ограниченным, так как iOS в любом случае не разрешает доступ к файловой системе без джейлбрейка, но было бы неплохо писать во внешние файловые системы без приходится реализовывать это для каждой платформы? Разве нельзя просто записать в каталог файлов приложения root и позволить OS API обрабатывать все остальное? Я новичок, так что не смейтесь слишком над глупым вопросом.

Большое спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 07 января 2020

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

Xamarin.Forms Интерфейс:

public interface IArchivos
    {
        void SaveFile(string fileName);
        string ReceiveFile(string fileName);
    }

Надеюсь, это поможет!

1 голос
/ 07 января 2020

Forms не предоставляет API для доступа к внешнему хранилищу, мы должны реализовать его на каждой конкретной c платформе, пожалуйста, отметьте https://docs.microsoft.com/en-us/xamarin/android/platform/files/external-storage?tabs=windows

0 голосов
/ 25 апреля 2020

Xamarin Для Android Реализация.

// 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);
...