EDIT: Наконец-то я нашел ошибку. Это совершенно не имеет отношения к растровым изображениям, потокам или статике. Похоже, что один из моих коллег забыл удалить вложение электронной почты после отправки письма, и служба вложений почты остается открытой. Я использовал оператор using для всего процесса отправки почты, и он решен. Спасибо всем.
Я знаю, вы можете сказать, что существуют миллиарды тем с одинаковым названием, и это дубликат, но поверьте мне, это не так. Я искал решение около 7 часов, но пока ничего не помогло.
Проблема заключается в следующем: это приложение для захвата фотографий, которое использует WebcamSource в качестве веб-камеры. Приложение работает хорошо, когда первая фотография сделана и отправлена пользователю по электронной почте. Однако, когда пользователь снова возвращается к процессу (где он начался до первого запуска), приложение выдает такую ошибку. Неверный код ниже.
public static void SaveImageCapture(BitmapSource bitmap)
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
// bitmap = BitmapFrame.Create(BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.QualityLevel = 100;
encoder.Rotation = Rotation.Rotate270;
try
{
using (FileStream fstream = new FileStream("Photos\\" + fileName + ".jpg", FileMode.Create))
{
encoder.Save(fstream);
fstream.Close();
}
}
catch (Exception e) {
System.Windows.Forms.MessageBox.Show(e.ToString());
}
}
Код вылетает на FileStream fstream = new FileStream("Photos\\" + fileName + ".jpg", FileMode.Create)
и выдает ошибку
Процесс не может получить доступ к файлу "C:\Users[имя_пользователя]\Dropbox[имя_проекта][имя_проекта]\bin\Debug\Photos", поскольку он используется другим процессом.
Я попытался закрыть поток с веб-камеры, окружить код с помощью try/catch, поместить его в оператор using, добавить поля FileAccess и FileShare, попытаться добавить BitmapCreateOptions.None
и BitmapCacheOption.OnLoad
(это не позволило мне), создать новые изображения с другими именами, а не перезаписывать то же изображение, удаление изображения после отправки по электронной почте (это дало мне ту же ошибку) и некоторые небольшие меры, которые могут вызвать проблемы с доступом к файлу.
fileName
? Я бы предложил использоватьPath.Combine
для построения путей. Также, возможно,DropBox
синхронизирует файлы, а это другой процесс. - person Marc   schedule 20.08.2013SaveImageCapture
? Вы пытаетесь сохранить изображение обратно в тот же файл, из которого оно было загружено? - person Jim Mischel   schedule 20.08.2013