C# Azure:进程无法访问文件“”,因为另一个进程正在使用该文件
我正在尝试在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”,因为另一个进程正在使用该文件 代码如下: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:
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之外引用。这样不行吗?我是不是遗漏了什么?