c# - UWP FileStream 抛出“访问路径被拒绝”。
问题描述
我正在上大学,我被授予一项任务来制作一个应用程序,该应用程序可以计算并显示 UWP 应用程序中文件的哈希值。每次当我想计算我选择的文件的哈希值时,我都会得到“访问路径被拒绝”。错误。我想计算将文件流作为参数传递的哈希值。我尝试以管理员身份运行 Visual Studio,但没有成功。下面是代码。
public partial class MainPage : Page
{
byte[] result;
string[] algorithms = { "MD5", "SHA-1", "SHA256", "SHA384", "SHA512" };
string algorithm = "", path = "";
HashAlgorithm hash;
public MainPage()
{
this.InitializeComponent();
AlgorithmsList.ItemsSource = algorithms;
}
/* Browse for file */
private async void BrowseButton(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
openPicker.FileTypeFilter.Add("*");
StorageFile file = await openPicker.PickSingleFileAsync();
if (file != null)
{
resultTextBlock.Text = "Result";
pathTextBlock.Text = file.Path;
path = file.Path;
}
}
/* Method that shows the hash after computing it */
private async void GoButton(object sender, RoutedEventArgs e)
{
if (path == "" || AlgorithmsList.SelectedIndex == -1)
{
MessageDialog dialog;
if (path == "")
dialog = new MessageDialog("You have to select a file");
else
dialog = new MessageDialog("You have to select an algorithm");
await dialog.ShowAsync();
}
else
{
algorithm = AlgorithmsList.Text;
string hash = await Task.Run(() => CalculateHash());
resultTextBlock.Text = hash;
}
}
private string CalculateHash()
{
string exception = "";
hash = InitAlgorithm();
try
{
using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
fileStream.Position = 0;
result = hash.ComputeHash(fileStream);
}
StringBuilder sb = new StringBuilder(result.Length * 2);
foreach (byte b in result)
{
sb.AppendFormat("{0:x2}", b);
}
return sb.ToString();
}
catch (Exception e)
{
exception = e.ToString();
}
return exception;
}
private HashAlgorithm InitAlgorithm()
{
HashAlgorithm hash = null;
switch (algorithm)
{
case ("MD5"):
hash = MD5.Create();
break;
case ("SHA-1"):
hash = SHA1.Create();
break;
case ("SHA256"):
hash = SHA256.Create();
break;
case ("SHA384"):
hash = SHA384.Create();
break;
case ("SHA512"):
hash = SHA512.Create();
break;
}
return hash;
}
}
解决方案
您无权访问该路径。您只能访问StorageFile
. 所以让它成为变量MainPage
并在CalculateHash
.
推荐阅读
- reactjs - 在 redux 商店更新时不会触发 useEffect
- reactjs - 在 tsx 文件中显示来自 ReactJS 中 url 的图像
- python - 为 Python Azure Function App 设置构建管道时出现“无法在 Azure Active Directory 中创建应用程序”异常
- php - Payone获取交易清单“历史”
- c++ - 执行显式模板实例化 (ETI) 的重复方式更少?(没有宏)
- python - 如何在python中重塑图像的尺寸
- bash - 在 conda 环境中,当我关闭终端时,GNU 并行作业停止启动新作业
- html - 使用 CSS 网格垂直扩展网格模板行时遇到问题
- css - 将主题变量的值传递给Angular中的子组件
- java - 如何覆盖父类中的方法并在子类中执行?