2010-05-29 69 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(),一旦你完成它。

相關問題