在C#azure存储下载中拒绝访问该路径

时间:2016-05-27 15:56:16

标签: c# .net azure

我从以下azure存储器下载文件时获取路径被拒绝异常是代码片段。

 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);
                }

3 个答案:

答案 0 :(得分:2)

您正在名为C:的{​​{1}}根目录上创建一个没有扩展名的文件。 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()

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您能否请尝试以下代码:

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