Откройте файл из удаленного сетевого ресурса в приложении Xamarin UWP - PullRequest
0 голосов
/ 12 мая 2018

Есть ли способ открыть файл из удаленного сетевого ресурса в приложении Xamarin UWP.?

Мы пробовали с помощью Xamarin File Picker, но он включает пользователя для выбора файла.

private void OpenFile()
{
    FileData fileData = await CrossFilePicker.Current.PickFile();
    string fileName = fileData.FileName;
    string contents = System.Text.Encoding.UTF8.GetString(fileData.DataArray);
 }

Мы хотим, чтобы, если пользователь нажимает на Путь , тофайл будет отображаться в режиме чтения.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Можно ли открыть файл с удаленного сетевого ресурса в приложении Xamarin UWP.

UWP предоставил broadFileSystemAccess возможность доступа к более широкому файлу через API в Windows.Storage namespace. Вам нужно добавить ограниченную возможность broadFileSystemAccess перед доступом.

<Package
  ...
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">

...
<Capabilities>
    <rescap:Capability Name="broadFileSystemAccess" />
</Capabilities>

Если вы хотите получить файл в .NET Standard, вам нужно создать DependencyService.

Создать интерфейс доступа к файлам в вашем .NET Standard.

IFileAccess

public interface IFileAccess
 {
     Task<FileData> GetFileStreamFormPath(string Path);
 }
 public class FileData
 {
     public byte[] DataArray { get; set; }
     public string FileName { get; set; }
     public string FilePath { get; set; }
 }

Реализация интерфейса IFileAccess в собственном проекте UWP.

FileAccessImplementation

[assembly: Xamarin.Forms.Dependency(typeof(FileAccessImplementation))]
namespace App6.UWP
{
    public class FileAccessImplementation : IFileAccess
    {
        public async Task<FileData> GetFileStreamFormPath(string Path)
        {
            var file = await StorageFile.GetFileFromPathAsync(Path);
            byte[] fileBytes = null;
            if (file == null) return null;
            using (var stream = await file.OpenReadAsync())
            {
                fileBytes = new byte[stream.Size];
                using (var reader = new DataReader(stream))
                {
                    await reader.LoadAsync((uint)stream.Size);
                    reader.ReadBytes(fileBytes);
                }
            }

            var FileData = new FileData()
            {
                FileName = file.Name,
                FilePath = file.Path,
                DataArray = fileBytes
            };
            return FileData;
        }
    }
}

Использование

var file = DependencyService.Get<IFileAccess>().GetFileStreamFormPath(@"\\remote\folder\setup.exe");
0 голосов
/ 13 мая 2018

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

var filename = @"\\myserver\myshare\myfile.txt";
var file = await StorageFile.GetFileFromPathAsync(filename);
using(var istream = await attachmentFile.OpenReadAsync())
    using(var stream = istream.AsStreamForRead())
          using(var reader = new StreamReader(stream)) {
              var contents = reader.ReadToEnd();

          }
...