2010-12-30 2 views
2

내가 그렇게 할 노력하고있어하지만 프로그램이이 예외를 throw 형식 'System.IO.IOException'처리되지 않은 예외가 mscorlib.dll에서 발생 WPF : 사진을 보여주는 동안 사진을 어떻게 사용할 수 있습니까?

추가 정보 : 프로세스가 파일을 액세스 할 수 없습니다 'C : \ Users \ Roy \ documents \ visual studio 2010 \ Projects \ Assignment3 \ Assignment3 \ bin \ Debug \ Images \ Chrysanthemum.jpg'파일이 다른 프로세스에서 사용 중이기 때문입니다.

열린 상태에서 사용하는 방법이 있습니까?

코드 :

if (imgAddMessage.Source != null) 
      { 
       BitmapImage src = (BitmapImage)imgAddMessage.Source; 
       if (!Directory.Exists("Images")) 
       { 
        Directory.CreateDirectory("Images"); 
       } 

       FileStream stream = new FileStream("Images/" + imageName, FileMode.Create, FileAccess.ReadWrite); 
       JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
       encoder.Frames.Add(BitmapFrame.Create(src)); 
       encoder.Save(stream); 
       stream.Close(); 
      } 
+0

읽기 권한이 있어야했다 - 그것은 도움이 될 것이다. – ChrisF

+0

사용할 이미지 복사본을 만들 수 있습니까? –

+0

당신이'FileStream'을 만들려고 할 때 당신이 예외를 얻고 있다고 가정합니다. 파일이 실제로 다른 프로그램에서 열려 있습니까? 아니면 당신의 프로그램에서? 프로세스가 독점적 액세스로 파일을 열면이 프로세스에 쓸 수 없습니다. –

답변

1

두 가지.

1) 게시 된 코드에 FileStream 주위에 using 문이 없거나 Dispose를 호출하지 않습니다.

2) 저장하려고하는 그림을 보여주는 코드는 FileAccess.Read를 사용해야합니다. 단 하나의 코드 만 파일에 쓰기 잠금을 유지할 수 있기 때문입니다. 파일을 보여주는 프로그램이라면 이미지를 메모리에 캐시하고 메모리의 바이트를 기반으로 이미지를 표시하는 것이 좋습니다. 그럼 당신은 파일에 자물쇠를 개최하지 않으며 나중에 그것을 원하는대로 할 수 ...

0

그냥 문제가 있으면 호기심.
다음을 시도해 보셨습니까?

if (imgAddMessage.Source != null) 
{ 
    string imageDirectory = "pack://application:,,,/Images"; 
    BitmapImage src = (BitmapImage)imgAddMessage.Source; 
    if (!Directory.Exists(imageDirectory)) 
     Directory.CreateDirectory(imageDirectory); 

    using (FileStream stream = new FileStream(Path.Combine(imageDirectory, imageName), FileMode.Create, FileAccess.ReadWrite)) 
    { 
     JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(src)); 
     encoder.Save(stream); 
    } 
} 

그리고 @Marco로

은 당신이 당신의 코드를 게시 할 수/쓰기 권한

관련 문제