Azure:进程无法访问文件“”,因为它正由另一个进程使用

时间:2010-05-29 21:09:44

标签: c# azure cloud executable

我正在尝试在Azure云上运行一个运行matlab编译的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)

如果有人能告诉我哪里出错了,那将会很有帮助。

3 个答案:

答案 0 :(得分:1)

CloudBlob不是IDisposable,因此您不需要using语句。 (它们只是引用,因此它们不会分配任何需要释放的资源。)

应该,但是,FileStream周围可能有一个using()块。你确定它被关闭了吗?

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

顺便说一下,你可以做“container.GetBlobRefence(”foo“)。DownloadToFile(matlabPath);” (预测你将要使用该文件句柄做什么)。

答案 1 :(得分:0)

围绕大部分内容添加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);

答案 2 :(得分:-1)

完成后尝试fs.close()。