2010-05-29 4 views
0

Я пытаюсь получить исполняемый на Matlab exe, работающий на облаке Azure, и для этого нужно получить 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, поэтому вам не нужен оператор using. (Это просто ссылки, поэтому они не выделяют никаких ресурсов, которые должны быть выпущены.)

Вы, , должны, однако, вероятно, с использованием() блока вокруг FileStream. Вы уверены, что он закрыт?

Где пробегает код? Выполняется ли он только один раз?

BTW, вы можете просто сделать «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 u, помещенного (в коде выше), на которые ссылаются вне использования. Это не работает правильно? Я что-то упустил? – Shantanu

-1

Попробуйте fs.close() после того, как вы закончите с этим.

Смежные вопросы

 Смежные вопросы