2010-05-29 12 views
0

Azure 클라우드에서 실행중인 matlab 컴파일 된 exe를 얻으려고하는데, 그 목적으로 v78.zip을 로컬에 가져와야합니다. 클라우드를 저장하고 압축을 풀어서 클라우드에서 exe를 실행 해 볼 수 있습니다. 이 프로그램은 로컬에서 실행될 때 제대로 작동하지만 배포시 코드 아래에 표시된 줄에 오류가 발생합니다. 오류 :Azure : 프로세스가 다른 프로세스에서 사용 중이기 때문에 프로세스가 파일에 접근 할 수 없습니다. "

프로세스가 다른 프로세스에서 사용 중이므로 'C : \ Resources \ directory \ cc0a20f5c1314f299ade4973ff1f4cad.WebRole.LocalStorage1 \ v78.zip'파일에 액세스 할 수 없습니다.

예외 정보 : System.IO.IOException : 프로세스가 파일 'C를 : 자원 \ \ 디렉토리 \ 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 주위에 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

안녕하세요 Dan, 제안에 감사드립니다. 나는 그것을 구현하는 2 가지 문제에 직면하고있다 - 먼저, System.IDisposable로 암시 적으로 변환 할 수있는 유형을 기대하고 두 번째로, stmt를 사용하여 내부에서 일어나는 선언과 할당이있다. 그게 제대로 작동하지 않을까요? 내가 여기서 뭔가를 놓치고 있니? – Shantanu

-1

작업이 끝나면 fs.close()를 사용해보십시오.

관련 문제