在 Xamarin UWP 应用程序中从远程网络共享打开文件
Open a file from Remote Network Share in Xamarin UWP application
有没有办法在 Xamarin UWP 应用程序中从远程网络共享打开文件。 ?
我们尝试使用 Xamarin 文件选择器,但它包含 select 文件的用户。
private void OpenFile()
{
FileData fileData = await CrossFilePicker.Current.PickFile();
string fileName = fileData.FileName;
string contents = System.Text.Encoding.UTF8.GetString(fileData.DataArray);
}
我们希望如果用户单击 路径,则文件将以阅读模式显示。
如果您知道文件的名称和路径,请阅读其内容。你不需要 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();
}
Is there any way to open a file from Remote Network Share in Xamarin UWP Application. ?
UWP 已提供 broadFileSystemAccess
功能,可以使用 Windows.Storage namespace
中的 API 访问更广泛的文件。您需要在访问之前添加受限的 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; }
}
在本机 UWP 项目中实现 IFileAccess
接口。
文件访问实现
[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");
有没有办法在 Xamarin UWP 应用程序中从远程网络共享打开文件。 ?
我们尝试使用 Xamarin 文件选择器,但它包含 select 文件的用户。
private void OpenFile()
{
FileData fileData = await CrossFilePicker.Current.PickFile();
string fileName = fileData.FileName;
string contents = System.Text.Encoding.UTF8.GetString(fileData.DataArray);
}
我们希望如果用户单击 路径,则文件将以阅读模式显示。
如果您知道文件的名称和路径,请阅读其内容。你不需要 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();
}
Is there any way to open a file from Remote Network Share in Xamarin UWP Application. ?
UWP 已提供 broadFileSystemAccess
功能,可以使用 Windows.Storage namespace
中的 API 访问更广泛的文件。您需要在访问之前添加受限的 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; }
}
在本机 UWP 项目中实现 IFileAccess
接口。
文件访问实现
[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");