我正在尝试在 UWP 应用程序中读取 C 或 D 驱动器的 .txt 文件。当我在资产中声明文件名的局部变量时,这是可以的。但它也可以从其他目录或驱动器中读取文件。
我已经尝试过像下面的代码部分:
try
{
String FileName = "C:\Users\abc\Documents\file.txt";
// Read the file and display it line by line.
string[] lines = File.ReadAllLines(FileName);
foreach (string inputLine in lines)
{
List<String> dummyList = new List<String>();
String[] lineList = inputLine.Split(", ");
foreach (var item in lineList)
{
dummyList.Add(item);
//Debug.WriteLine(item);
}
mainList.Add(dummyList);
}
//file.Close();
}
catch (Exception ex)
{
Debug.WriteLine("[DEBUG] " + ex);
}
“file.txt”对所有用户和应用程序都具有本地读写权限。它是通过 Windows 中的 file.txt 属性完成的。
异常如下:
System.UnauthorizedAccessException: Access to the path 'C:\Users\abc\Documents\file.txt' is denied.
at System.IO.FileStream.ValidateFileHandle(SafeFileHandle fileHandle)
at System.IO.FileStream.CreateFileOpenHandle(FileMode mode, FileShare share, FileOptions options)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize)
at System.IO.File.InternalReadAllLines(String path, Encoding encoding)
at Localizer.Data.StringDataText.StringDataInitialize()
As 亚当·麦克马洪据说,UWP应用程序是沙盒应用程序,不直接访问外部环境中的文件。文件权限可以查看这个document https://learn.microsoft.com/en-us/windows/uwp/files/file-access-permissions.
具体到您提供的示例,您可以使用FileOpenPicker选择一个文本文件并从获得的StorageFile中读取内容。
这个例子供参考:
public async static Task<StorageFile> OpenLocalFile(params string[] types)
{
var picker = new FileOpenPicker();
picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
Regex typeReg = new Regex(@"^\.[a-zA-Z0-9]+$");
foreach (var type in types)
{
if (type == "*" || typeReg.IsMatch(type))
picker.FileTypeFilter.Add(type);
else
throw new InvalidCastException("Invalid extension");
}
var file = await picker.PickSingleFileAsync();
if (file != null)
return file;
else
return null;
}
Usage
var txtFile=await OpenLocalFile(".txt");
if(txtFile!=null)
{
var lines = FileIO.ReadLinesAsync(txtFile);
// ... Other code
}
此致。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)