【问题标题】:Access to the path is denied in C# azure storage download在 C# azure 存储下载中拒绝访问路径
【发布时间】:2020-11-12 19:10:10
【问题描述】:

我在从 Azure 存储下载文件时访问路径被拒绝异常,下面是代码 sn-p。

string path = @"c:\TEMP";

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["CloudStorageString"]);
// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
// Retrieve reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("167_PostP45_temp.png");

// Save blob contents to a file.
using (var fileStream = System.IO.File.OpenWrite(path))
{
    blockBlob.DownloadToStream(fileStream);
}

【问题讨论】:

  • 你试过以管理员身份运行吗?
  • @Donal,您的意思是连接到 Visual Studio 对吧?如果是这样,我正在尝试以管理员身份运行..但仍然有问题..

标签: c# .net azure


【解决方案1】:

您正在C: 的根目录上创建一个名为TEMP 且没有扩展名的文件。 C: 的根是一个受保护的位置,不能被非管理程序写入。

另一个可能给你这个例外的事情是,如果你尝试在一个目录上调用File.OpenWrite,我认为这更有可能发生在你身上。

如果您尝试保存到文件夹C:\TEMP,您必须将文件名添加到您打开的路径中。

using (var fileStream = File.OpenWrite(Path.Combine(path, "167_PostP45_temp.png"))
{
    blockBlob.DownloadToStream(fileStream);
}

这也假设文件夹C:\TEMP 已经存在。如果您想使用用户的实际临时文件夹,请使用Path.GetTempPath() 获取它

using (var fileStream = File.OpenWrite(Path.Combine(Path.GetTempPath(), "167_PostP45_temp.png")))
{
    blockBlob.DownloadToStream(fileStream);
}

【讨论】:

  • @Raj 如果问题得到解决,您应该通过单击问题旁边的复选标记来标记已接受的答案
  • 在 azure 上发布更改后会出现同样的问题。发布解决方案后,他们还有什么需要做的吗?
  • @Raj 您尝试使用的目录可能不存在。如果文件夹不存在,可以使用Directory.CreateDirectory(path);创建(运行程序的用户必须有权限创建目录,否则会失败)
  • 我也在尝试创建文件夹,但在创建简单文件夹时仍然遇到相同的异常,即访问路径被拒绝,是否要从 azure 仪表板进行任何设置以创建文件夹? ?
  • @Raj 我很困惑,你是想在 Azure 上创建一个文件夹,还是想在运行程序的机器上创建一个文件夹来保存你从 azure 获得的文件?
【解决方案2】:

有几个问题。首先,正如 Guarav Mantri 所观察到的,您需要打开文件进行写入,而不是打开目录。其次,您应该使用 System.IO.Path.GetTempPath() 来检索临时目录,给出:

using (var fileStream = System.IO.File.OpenWrite(System.IO.Path.GetTempPath() + "\\167_PostP45_temp.png"))
{
    blockBlob.DownloadToStream(fileStream);
}

【讨论】:

    【解决方案3】:

    你能试试下面的代码吗:

    using (var fileStream = System.IO.File.OpenWrite(path + "\\167_PostP45_temp.png"))
    {
        blockBlob.DownloadToStream(fileStream);
    }
    

    【讨论】:

    • 在 azure 上发布更改后会出现同样的问题。发布解决方案后,他们还有什么需要做的吗
    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 2011-03-29
    • 2017-02-03
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多