2013-08-20 2 views
1

EDIT:Я, наконец, нашел ошибку. Это абсолютно не имеет отношения к растровым изображениям или потокам или статике. Похоже, что один из моих коллег забыл удалить вложение электронной почты после отправки почты, и служба вложений электронной почты остается открытой. Я использовал инструкцию для отправки всей почты, и она решается. Всем спасибо.«Процесс не может получить доступ к файлу, потому что он используется другим процессом». Ошибка

Я знаю, что вы можете сказать, что есть миллиарды потоков с одним и тем же названием, и это дубликат, но поверьте мне, что это не так. Я искал решение, как 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 \ Фотография «потому что он используется другим процессом.

Я попытался закрыть веб-поток, окружая код с TRY/поймать, поставив его в использовании заявление, добавив FileAccess и Обменник поля, пытаясь добавить BitmapCreateOptions.None и BitmapCacheOption.OnLoad (это не позволит мне), создавая новые образы с вместо того, чтобы переписывать одно и то же изображение, удаляя изображение после отправки электронной почты (это дало мне ту же ошибку) и некоторые небольшие меры, которые могут вызвать проблемы с доступом к файлам.

+0

попробовать переименование image..to увидеть, если потоки апеллируют к нему. – Anand

+0

Я уже пробовал это, я попытался сохранить каждое изображение с разными именами. –

+1

не является «fstream.close» избыточным, так как использование (filestream) все равно закроет его? –

ответ

0

Я бы предложил сделать имя файла что-то более общего, так присоединяя метку времени или что-то, но дополнительно, в using вызова fstream.Flush() перед тем fstream.Close()

+0

Я пробовал это сейчас, но это не сработало. –

0

ли вы ссылаетесь, что местоположение файла (в основном фотографии папки) где-нибудь еще в вашем кода, прежде чем он достигнет этой точки?

Похоже, что вы получили доступ к этому в другом месте вашего кода, и соединение с ним не было закрыто - удобно использовать блок Using при вызове методов ввода-вывода.

Хотя он не идеален, попробуйте позвонить GC.Collect() после encoder.Rotation = Rotation.Rotate270;

+0

Я просто добираюсь до папки, чтобы добавить изображение в виде письма. Но это позже в коде. –

+0

Будет ли файл, к которому вы пытаетесь получить доступ, всегда должен находиться в папке «Отладка»? Поскольку это может быть проблемой, в том, что DLL и т. Д. Хранятся в этой папке, доступ к которой является компилятором. Если файлы были сохранены в папке temp, то если вы изменили параметры FileStream, чтобы указать на папку temp, что может помочь? Не совсем уверен, но это может сработать! – Aaron

+0

Обычно я использую папку Release, но она давала ту же ошибку. Чтобы найти проблему, я переключился на отладочную версию. –

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

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