Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure:进程无法访问文件“”,因为另一个进程正在使用该文件_C#_Azure_Cloud_Executable - Fatal编程技术网

C# Azure:进程无法访问文件“”,因为另一个进程正在使用该文件

C# Azure:进程无法访问文件“”,因为另一个进程正在使用该文件,c#,azure,cloud,executable,C#,Azure,Cloud,Executable,我正在尝试在Azure云上运行matlab编译的exe,为此,在我尝试在云上运行exe之前,需要在云的本地存储上获取一个v78.zip并解压缩它。该程序在本地执行时工作正常,但在部署时代码中下面标记的行出现错误。错误是: 进程无法访问文件“C:\Resources\directory\cc0a20f5c1314f299ade4973ff1f4cad.WebRole.LocalStorage1\v78.zip”,因为其他进程正在使用该文件 异常详细信息:System.IO.IOException:

我正在尝试在Azure云上运行matlab编译的exe,为此,在我尝试在云上运行exe之前,需要在云的本地存储上获取一个v78.zip并解压缩它。该程序在本地执行时工作正常,但在部署时代码中下面标记的行出现错误。错误是:

进程无法访问文件“C:\Resources\directory\cc0a20f5c1314f299ade4973ff1f4cad.WebRole.LocalStorage1\v78.zip”,因为其他进程正在使用该文件

异常详细信息:System.IO.IOException:进程无法访问文件“C:\Resources\directory\cc0a20f5c1314f299ade4973ff1f4cad.WebRole.LocalStorage1\v78.zip”,因为另一个进程正在使用该文件

代码如下:

string localPath = RoleEnvironment.GetLocalResource("LocalStorage1").RootPath;

Response.Write(localPath + " \n");

Directory.SetCurrentDirectory(localPath);

CloudBlob mblob = GetProgramContainer().GetBlobReference("v78.zip");
CloudBlockBlob mbblob = mblob.ToBlockBlob;

CloudBlob zipblob = GetProgramContainer().GetBlobReference("7z.exe");

string zipPath = Path.Combine(localPath, "7z.exe");
string matlabPath = Path.Combine(localPath, "v78.zip");
IEnumerable<ListBlockItem> blocklist = mbblob.DownloadBlockList();


BlobStream stream = mbblob.OpenRead();
>>  FileStream fs = File.Create(matlabPath);    (Exception occurs here)

如果有人能告诉我哪里出了问题,那将是非常有帮助的。

在大部分内容周围添加一个using子句。你有一个zip文件的文件句柄。当使用超出范围时,文件引用也将超出范围

using(CloudBlob mblob = GetProgramContainer().GetBlobReference("v78.zip"))
{
        CloudBlockBlob mbblob = mblob.ToBlockBlob;

        CloudBlob zipblob = GetProgramContainer().GetBlobReference("7z.exe");

        string zipPath = Path.Combine(localPath, "7z.exe");
        string matlabPath = Path.Combine(localPath, "v78.zip");
        IEnumerable<ListBlockItem> blocklist = mbblob.DownloadBlockList();


        BlobStream stream = mbblob.OpenRead();
}
 FileStream fs = File.Create(matlabPath);

CloudBlob不可识别,因此不需要using语句。它们只是引用,所以它们不分配任何需要释放的资源

但是,您应该在文件流周围有一个using块。你确定要关门了吗

这段代码在哪里运行?它只运行一次吗


顺便说一句,您只需执行container.GetBlobRefencefoo.DownloadToFilematlabPath;预测您将要对该文件句柄执行的操作。

一旦完成,请尝试fs.close。

嗨,丹,谢谢您的建议。我在实现它时面临两个问题-第一,使用预期一个类型隐式转换为System.IDisposable;第二,在using stmt中发生了声明和赋值,u在上面放入的代码在using stmt之外引用。这样不行吗?我是不是遗漏了什么?