Я не могу напрямую сохранить изменения в файле, открытом через приложение maui.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Я не могу напрямую сохранить изменения в файле, открытом через приложение maui.

Сообщение Anonymous »


Мое приложение сохраняет документы (pdf, word...) во внешней папке (документы) с разрешением на доступ ко всем файлам. Однако когда я открываю документ из приложения, оно открывает копию документа, которую я затем могу сохранить только как копию и заменить ею исходный файл. Я хотел бы открыть исходный файл напрямую.

Код OpenDocuments (в FileInfo введите информацию о файле, сохраненном во внешнем хранилище, например в папке «Документы Android»):

public async void OpenDocuments(FileInfo fileInfo) { пытаться { Java.IO.File myDir = новый (fileInfo.Directory.FullName); мойDir.Mkdir(); Файл Java.IO.File = новый (myDir, fileInfo.Name); если (файл.Существует()) { если (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N) { var fileUri = AndroidX.Core.Content.FileProvider.GetUriForFile(Android.App.Application.Context, Android.App.Application.Context.PackageName + ".provider", file); вар намерение = новое намерение (Intent.ActionOpenDocument); намерение.SetData(fileUri); намерение.AddFlags(ActivityFlags.NewTask); Intent.AddFlags(ActivityFlags.GrantReadUriPermission); намерение.AddFlags(ActivityFlags.GrantWriteUriPermission); Android.App.Application.Context.StartActivity(намерение); } еще { вар fileUri = Android.Net.Uri.Parse(file.AbsolutePath); вар намерение = новое намерение (Intent.ActionView); намерение.SetDataAndType(fileUri, fileInfo.Extension); намерение = Intent.CreateChooser(намерение, «Открыть файл»); намерение!.AddFlags(ActivityFlags.NewTask); Android.App.Application.Context.StartActivity(намерение); } } } поймать (Исключение ex) { await Shell.Current.DisplayAlert("ОШИБКА", ex.Message, "ОК"); } } provider_path.xml (поместите его в папку Resources/XML вашего Android, если у вас его нет, создайте папку XML в Resources):

поставщик в манифесте Android (поместите это в манифест Android):

Для доступа к внешним файлам нужно включить доступ ко всем файлам, я делаю так и работает:

private async void SetPermission() { #если АНДРОИД Android.Net.Uri uri = Android.Net.Uri.Parse("пакет:" + Android.App.Application.Context.ApplicationInfo.PackageName); Намерение = новое намерение (действие: Android.Provider.Settings.ActionManageAppAllFilesAccessPermission, uri: uri); Platform.CurrentActivity.StartActivityForResult(намерение, 1); #endif } Создать папку во внешнем хранилище Android Documents (эта работа):

public async void CreateFolder() { bool разрешено = Android.OS.Environment.IsExternalStorageManager; если (разрешено) { строка documentDir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments).AbsolutePath; строка mainDir = Path.Combine(documentDir, "DocumentsMobile"); fileCache = Directory.CreateDirectory(mainDir); } } Ищем файл в каталоге, затем вам необходимо передать этот информационный файл в OpenDocuments (эта работа):

public FileInfo SearchFile (строковое имя файла) var file = fileCache.GetFiles().SingleOrDefault(p => p.Name == fileName); возвратный файл; } Таким образом у меня все работает, но файл открывается как копия исходного файла и поэтому я не могу сохранить его непосредственно в исходном файле, а приходится сохранять как копию и заменять исходным файлом. То же самое происходит со всеми типами файлов, и я также пробовал использовать другие приложения, помимо приложений Microsoft, например WPS Office.

Откройте файл с помощью Word, и здесь у меня нет сохранения, а только сохранение как копия:
Изображение



Изображение


ОБНОВЛЕНИЕ

Использование SDK версии 23 или ниже работает, но это всего лишь обходной путь
public async void ApriFile(FileInfo fileInfo) { вар намерение = новое намерение (Intent.ActionView); намерение.AddFlags(ActivityFlags.NewTask); Intent.AddFlags(ActivityFlags.GrantReadUriPermission); расширение строки = MimeTypeMap.GetFileExtensionFromUrl(fileInfo.Name); строка mimeType = GetMimeType (расширение); Intent.SetDataAndType(Android.Net.Uri.FromFile(файл), mimeType); Android.App.Application.Context.StartActivity(намерение); }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Я не могу напрямую сохранить изменения в файле, открытом через приложение maui.
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Я не могу напрямую сохранить изменения в файле, открытом через приложение maui.
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Я не могу напрямую сохранить изменения в файле, открытом через приложение maui.
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Я не могу напрямую сохранить изменения в файле, открытом через приложение maui.
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Запрос CORS заблокирован в локально открытом html-файле
    Гость » » в форуме Jquery
    0 Ответы
    21 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»