我目前正在编写语言翻译应用程序。我希望支持选择文件的功能,将文件内容读入输入框,并在按下相应的按钮后输出翻译。
我正在使用插件'Xam.Plugin.FilePicker'来允许用户选择正在运行的文件。当用户选择一个文件时,我拥有它,以便文件名显示在屏幕上。但是,尝试将文件读入输入框时会出现问题,我认为这与应用程序无法确定文件的路径有关-当前,应用程序试图从Visual Studio的位置读取文件2017位于。
我尝试了几种方法,下面对其中的一些方法进行了详细介绍:
我也尝试过:
var file = await CrossFilePicker.Current.PickFile();
if (file != null) {
string filePath =
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string filename = Path.Combine(filePath, file.FileName);
using (var reader = new StreamReader(filename)) {
entText= reader.ReadToEnd();
}
}
entText
是MainPage.xaml.cs文件中输入框的名称
下面是我到目前为止的代码。我已经从文件中删除了上面的代码,尽管它给了我一个路径,但该路径要么是Visual Studio 2017所在的路径,要么是其他路径。无论哪种方式,应用程序都找不到文件。
C#代码:
private async void BtnReadFile_Clicked(object sender, EventArgs e)
{
string fileName;
string fileText;
string filePath;
// Allows the user to choose a file from any location
var file = await CrossFilePicker.Current.PickFile();
if (file != null)
{
lblFileRead.Text = file.FileName; // Displays the name of the file
}
}
Xaml代码:
<Entry x:Name="entText" Placeholder="Enter text to translate" Keyboard="Text"
HeightRequest="200" WidthRequest="250" TextChanged="EntText_TextChanged" />
<Button x:Name="btnReadFile" Text="Read in file" Clicked="BtnReadFile_Clicked" />
最后,我希望能够从任何位置读取文件,而不仅仅是预定位置,即
用户应该能够从“ C:/ Documents / files”,“ C:/ Downloads /”等中读取文件。
答案 0 :(得分:2)
我猜您正在使用Xamarin?您不应有权访问文件本身。您可以获取名称,也可以获取内容。
您可以通过访问file.DataArray
而不是使用传统的文件访问来获取文件的内容。因此,文件的实际路径是什么,与您无关。
答案 1 :(得分:1)
您正在将filePath
设置为
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
应改为:
file.FilePath
,因为后者是文件的实际位置。
答案 2 :(得分:1)
CrossFilePicker
返回对所选文件的完整路径引用。因此,您不必将其与任何其他路径组合。
请参阅project website中的示例 它准确显示了您尝试执行的操作-读取文件内容并将其输出。
try
{
FileData fileData = await CrossFilePicker.Current.PickFile();
if (fileData == null)
return; // user canceled file picking
string fileName = fileData.FileName;
string contents = System.Text.Encoding.UTF8.GetString(fileData.DataArray);
System.Console.WriteLine("File name chosen: " + fileName);
System.Console.WriteLine("File data: " + contents);
}
catch (Exception ex)
{
System.Console.WriteLine("Exception choosing file: " + ex.ToString());
}
您只需要通过将contents
的值放入控件来替换控制台输出。