Azure: процесс не может получить доступ к файлу "", поскольку он используется другим процессом - PullRequest
0 голосов
/ 30 мая 2010

Я пытаюсь запустить скомпилированный Matlab исполняемый файл в облаке Azure, и для этого мне нужно получить v78.zip в локальное хранилище облака и разархивировать его, прежде чем я смогу запустить exe на облако. Программа работает нормально, когда выполняется локально, но при развертывании выдает ошибку в строке, отмеченной ниже в коде. Ошибка:

Процесс не может получить доступ к файлу '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 ]

1 голос
/ 31 мая 2010

CloudBlob не являются IDisposable, поэтому вам не нужно использование оператора. (Это просто ссылки, поэтому они не выделяют ресурсы, которые должны быть освобождены.)

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

Где работает этот код? Он запускается только один раз?

Кстати, вы можете просто сделать "container.GetBlobRefence (" foo "). DownloadToFile (matlabPath);" (ожидая, что вы собираетесь сделать с этим дескриптором файла).

0 голосов
/ 09 августа 2010

Попробуйте fs.close (), как только закончите.

0 голосов
/ 30 мая 2010

Добавьте условие использования вокруг большей части этого. У вас есть файл дескриптор вашего почтового файла висит вокруг. Когда использование выходит за рамки, ссылка на файл тоже.

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);
...