Я сохраняю изображение холста на сервер с помощью FileStream. Он работает отлично в первый раз, но если пользователь снова посещает страницу в течение того же сеанса (без закрытия браузера), он выдает сообщение об ошибке «Процесс не может получить доступ к файлу» C: \ inetpub \ wwwroot \ CarmelFinancialWeb \ Contracts \ MyUniqueImageFileName. png ', потому что он используется другим процессом ». Я попытался использовать close и dispose в FileStream, но это все еще происходитКак закрыть поток после создания файла или создать другой доступ к вновь созданному файлу?
Процесс: - Пользователь переходит на страницу AssignContract, вывешивает на холсте, нажимает кнопку сохранения. - Изображение сохраняется в файле - Пользователь снова нажимает кнопку сохранения (даже после ожидания несколько минут) - Файл с сообщением об ошибке используется другим процессом.
[AuthorizeAdmin]
[HttpPost]
public ActionResult AssignContract(string ID, ModelContract tempCurrentContract, string imageData)
{
try
{
if (imageData != null)
{
string fileName = "MyUniqueImageFileName.png";
string fileNameWitPath = Path.Combine(Server.MapPath("~/Contracts"), fileName);
using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imageData);
bw.Write(data);
bw.Close();
bw.Dispose();
}
fs.Close();
fs.Dispose();
}
}
}
catch (Exception ex)
{
throw ex;
}
...
Update
не имели никакого воздействия на это. У кого-нибудь есть предложение о том, как предотвратить блокировку файла или как разблокировать файл? Спасибо.
Вы не заблокируете файл здесь. Что-то еще происходит. Если бы я должен был догадаться, я бы сказал, сканер вирусов. Лучше всего посмотреть этот файл после его создания и посмотреть, какой процесс его блокирует. – Will
Также вам не нужно вызывать fs.Dispose, используемый блок сделает это за вас. Может быть, вызов fs.Flush может помочь. (Я не так хорош с FileStreams !!) –
Спасибо за комментарии. Интересно, что вирусный сканер может заблокировать его. Как я могу сказать, что блокирует файл? У меня есть другое место, которое ставит подпись в формате pdf. Может ли быть причиной блокировки? Если да, то как я его разблокирую? System.Drawing.Image image = System.Drawing.Image.FromFile (HttpContext.Current.Server.MapPath ("~/Contracts/MyUniqueImageFileName.png")); – boilers222