2010-05-29 65 views
0

我想要获得在Azure云上运行的matlab编译的exe,并且为此目的需要将v78.zip拖放到本地存储云并将其解压缩,然后才能尝试在云上运行exe。该程序在本地执行时可以正常工作,但在部署时会在代码中标记为下面的行处出现错误。错误是:Azure:进程无法访问文件“”,因为它正在被另一个进程使用

进程无法访问文件'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) 

这将是很大的帮助,如果有人能告诉我,我要去哪里错了。

回答

1

CloudBlob的不是IDisposable,所以你不需要使用语句。 (它们只是引用,因此它们不会分配任何需要发布的资源。)但是,可能在FileStream周围有一个using()块。你确定它正在关闭吗?

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

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

0

添加使用条款围绕大多数这一点。你有一个文件处理你的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); 
+0

嗨丹,谢谢你的建议。我面临两个问题实现它 - 首先,使用期望一种类型可以隐式转换为System.IDisposable,其次,在使用stmt中发生的声明和赋值已放在(在上面的代码中),这些是在using之外引用的。这不会正常工作?我在这里错过了什么吗? – Shantanu 2010-05-30 06:06:07

-1

尝试fs.close(),一旦你完成它。

相关问题