Как получить доступ к файлам в приложении Xamarin.Form? - PullRequest
2 голосов
/ 14 февраля 2020

В настоящее время я пишу небольшой инструмент с формой Xamarin (Android), который берет некоторое содержимое файла и отображает его определенным образом c. В этих файлах у меня есть некоторые перекрестные ссылки (например, jpeg-изображения), которые должны быть встроены в отображение файла.

Чтобы получить основной файл, я использую «CrossFilePicker.Current.PickFile ()». Он возвращает объект «FileData», который уже имеет основное содержимое файла, а также URI этого файла.

Если в этом файле есть перекрестная ссылка, я могу предположить, что связанный файл находится в том же самом файле. папка в качестве основного файла.

Моя идея (на примере jpeg) получить базовую папку файла и добавить имя jpeg, а затем открыть изображение в виде потока:

ImagePath = Path.Combine(baseFolder.Trim(), imageFile.Trim());

try
{
    fileStream = new FileStream(ImagePath, FileMode.Open, FileAccess.Read);
    fileStream.DisposeWith(Disposables);

    ImageSource = ImageSource.FromStream(() => fileStream);
    ShowImage = true;
}
catch
{
    // Ignore
}

К сожалению, FileStream не удается и утверждает, что не может найти каталог, в котором он находится.

Путь к JPG выглядит следующим образом:

/document/0F1E-120D/TestData/P1060371.jpg

Путь к файлу, который я получаю от средства выбора, :

content://com.android.externalstorage.documents/document/0F1E-120D%3ATestData%2FTestFile.txt

Используя этот URI, я могу извлечь локальный путь:

/document/0F1E-120D:TestData/TestFile.txt

При удалении имени файла я получаю

/document/0F1E-120D:TestData

Очевидно, что путь неверен ...

Любой намек на то, как я могу получить правильный путь, который я могу передать в FileStream для чтения файла? Еще какие-нибудь намеки о том, что разрешения я должен позаботиться? В настоящее время я установил READ_EXTERNAL_STORAGE

1 Ответ

0 голосов
/ 14 февраля 2020

Если вы используете NetStandard2.0, вы используете этот код

System.IO.File.ReadAllBytes(filePath);

, он также применяется к конкретной c платформе (например: Xamarin. Android, Xamarin. iOS, et c )

...