В настоящее время я пишу небольшой инструмент с формой 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